記錄一下python的資料結構 array

2021-07-23 22:15:49 字數 2551 閱讀 9894

標準安裝的python中用列表(list)儲存一組值,可以用來當作陣列使用,不過由於列表的元素可以是任何物件,因此列表中所儲存的是物件的指標。這樣為了儲存乙個簡單的[1,2,3],需要有3個指標和三個整數物件。對於數值運算來說這種結構顯然比較浪費記憶體和cpu計算時間。

此外python還提供了乙個array模組,array物件和列表不同,它直接儲存數值,和c語言的一維陣列比較類似。但是由於它不支援多維,也沒有各種運算函式,因此也不適合做數值運算。

numpy的誕生彌補了這些不足,numpy提供了兩種基本的物件:ndarray(n-dimensional array object)和 ufunc(universal function object)。ndarray(下文統一稱之為陣列)是儲存單一資料型別的多維陣列,而ufunc則是能夠對陣列進行處理的函式。

所以使用前,需要`import numpy as np`

\>>> a = np.array([1,2,3,4])

\>>> b = np.array([[1,2,3][4,5,6]])

\#上面例子中的引數序列的元素都是整數,因此所建立的陣列的元素型別也是整數,並且是32bit的長整型。

\#可以通過dtype引數在建立時指定元素型別:

\>>> np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)

= array([[ 1., 2., 3., 4.],

[ 4., 5., 6., 7.],

[ 7., 8., 9., 10.]])

\>>> np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.complex)

= array([[ 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j],

[ 4.+0.j, 5.+0.j, 6.+0.j, 7.+0.j],

[ 7.+0.j, 8.+0.j, 9.+0.j, 10.+0.j]])

\>>> a.shape

= (4,)

\>>> b.shape

= (2,3)

\>>> b.shape = 3,2 # 對b進行調整

\>>> b

= ([[1,2][3,4][5,6]])

\>>> b.shape = 2,-1

\>>> b

= ([[1,2,3][4,5,6]])

\>>> d = a.reshape((2,2)) #建立1個改變了尺寸的新陣列,且a和d共享記憶體,改變其中乙個元素,會同時修改另乙個

\>>> a = np.arange(10)

\>>> a

= [0,1..,8,9]

\>>> np.arange(0,1,0.1) #arange函式類似於range函式,通過指定開始值、終值和步長來建立一維陣列,當然也是不包括終值的

= array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

\>>> np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)

= array([[ 0, 1, 2, 3, 4, 5],

[10, 11, 12, 13, 14, 15],

[20, 21, 22, 23, 24, 25],

[30, 31, 32, 33, 34, 35],

[40, 41, 42, 43, 44, 45],

[50, 51, 52, 53, 54, 55]])

\>>> a[5] #用整數做下標

\>>> a[3:5] #用範圍做下標獲取陣列切片,包括a[3]但不包括a[5]

= array([3,4])

\>>> a[:5]

array([0,1,2,3,4])

\>>> a[:-1] #用法同list

\>>> a[2:4] = 100,101 # 索引修改值

\>>> a[1:-1:2] #第三個引數表示步長

= array([1, 3, 5, 7])

\>>> a[::-1] #陣列頭尾顛倒,省略範圍的開始和結束

= array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

\>>> a[5:1:-2] #步長為負,則起始點要大於結束點

= array([5, 3])

\>>> b = a[3:7] #通過索引產生的新陣列b,和a共享資料空間

本篇部落格主要參考自

《用python做科學計算》

《python自學筆記之基礎內容回顧》

《python 列表(list)、字典(dict)、字串(string)常用基本操作小結 》

《 python list 操作》

《列表(list), 元祖(tuple), 字典(dict), 字串(string), 集合(set) 的基本方法 》

《python 2.7教程 - 廖雪峰》

記錄一下python的資料結構 dict

dict的key必須是不可變物件 因為dict根據key來計算value的儲存位置 雜湊演算法 要保證hash的正確性,作為key的物件就不能變。python中,字串 整數等都是不可變的,因此,可以放心地作為key。而list是可變的。dict的value可以是任意型別 本篇部落格主要參考自 用py...

整理一下演算法和資料結構

先列乙個目錄,乙個個往裡面填充每個原理 圖 原始碼 思想。演算法 資料結構 排序查詢 1 堆排序 2 比較排序 3 歸併排序 4 快速排序 5 插入排序 6 氣泡排序 7 簡單選擇排序 8 希爾排序 資料結構 1 hashtabe concurrenttable 2 arraylist vector...

記錄一下python注意的事項

1.python 沒有定義變數的做法,賦值直接寫,然後解析器直接翻譯 name zhangsan digtal 6 2.可以用函式type檢視變數的型別 type name 3.格式化字元 字串 s print 我的名字 name 十進位制 d 要表示位數的,06d 不夠的用0補,超過6位就顯示原有...