numpy 學習

1.numpy 數據類型

bool:布爾類型,1 個字節,值為 True 或 False。

int:整數類型,通常為 int64 或 int32 。

intc:與 C 里的 int 相同,通常為 int32 或 int64。

intp:用于索引,通常為 int32 或 int64。

int8:字節(從 -arange128 到 127)

int16:整數(從 -32768 到 32767)

int32:整數(從 -2147483648 到 2147483647)

int64:整數(從 -9223372036854775808 到 9223372036854775807)

uint8:無符號整數(從 0 到 255)

uint16:無符號整數(從 0 到 65535)

uint32:無符號整數(從 0 到 4294967295)

uint64:無符號整數(從 0 到 18446744073709551615)

float:float64 的簡寫。

float16:半精度浮點,5 位指數,10 位尾數

float32:單精度浮點,8 位指數,23 位尾數

float64:雙精度浮點,11 位指數,52 位尾數

complex:complex128 的簡寫。

complex64:復數,由兩個 32 位浮點表示。

complex128:復數,由兩個 64 位浮點表示。

可以在創建arrray時,使用dtype 來指定它的數據類型, 對array 對象使用dtype 查看數據類型


2. ndarry(N維數組對象)?

創建

使用array() 函數, 可以使用dtype 來指定類型

zeros() 函數來生成, 元素均為0 的數組

ones() 函數生成元素都為0 的數組

arange(start, stop,step,dtype) 函數來創建

n>>> np.arange(0,12).reshape(3,4)

array([[ 0,? 1,? 2,? 3],

[ 4,? 5,? 6,? 7],

[ 8,? 9, 10, 11]])

linspace(start, end, num) num: 生成的樣本數,也就是指定由開頭到結尾所指定的范圍分成幾個部分

>>> np.linspace(0,12,3)

array([? 0.,? 6.,? 12.])

也可以使用random.random(shape) 來用隨機數填充數組

>>> np.random.random((3,4))

array([[ 0.42793958,? 0.7801106 ,? 0.40430299,? 0.2440989 ],

[ 0.12988871,? 0.01634131,? 0.62752135,? 0.99287802],

[ 0.95552834,? 0.60075408,? 0.48059998,? 0.6966276 ]])

ndarry 數組的屬性

ndim 秩的數量

size 數組的大小

shape 數組的型

3.基本操作

重新設置形狀

>>> np.arange(0,12).reshape((3,4))

array([[ 0,? 1,? 2,? 3],

[ 4,? 5,? 6,? 7],

[ 8,? 9, 10, 11]])

算術運算

直接使用算術運算符進行運算

矩陣積: dot(A,B) 或A.dot(B), 矩陣不遵循交換律

通用函數: sqrt(), log() , sin(), ...

聚合函數

min()

max()

sum()

mean() 平均數

std()

索引

跟列表有些類似

>>> a=np.arange(20).reshape(4,5)

>>> a

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

[ 5,? 6,? 7,? 8,? 9],

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

[15, 16, 17, 18, 19]])

>>> a[[3,4],[3,4]]

實際獲取的是[1,3],也就是第2行和第4列對于的值8。以及[2, 4],也就是第3行和第5列對于的值14。

三維數組

>>>importnumpyasnp>>>a = np.arange(30).reshape(2,5,3)>>>a

array([[[0,1,2],

[3,4,5],

[6,7,8],

[9,10,11],

[12,13,14]],

[[15,16,17],

[18,19,20],

[21,22,23],

[24,25,26],

[27,28,29]]])# 索引>>>a[[0,1],[1,2],[1,2]]

array([4,23])

這里,[0,1]分布代表axis = 0和axis = 1。而,后面的[1,2],[1,2]分別選擇了第2行第2列和第3行第3列的兩個數。

切片

對于多維數組,我們只需要用逗號,分割不同維度即可:

>>>a = np.arange(20).reshape(4,5)>>>a

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

[5,6,7,8,9],

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

[15,16,17,18,19]])# 先取第 3,4 列(第一個維度),再取第 1,2,3 行(第二個維度)。>>>a[0:3,2:4]

array([[2,3],

[7,8],

[12,13]])# 按步長為 2 取所有列和所有行的數據。>>>a[:,::2]

array([[0,2,4],

[5,7,9],

[10,12,14],

[15,17,19]])

數組迭代

遍歷矩陣的每個元素

for item in A:

? ? ? print item?

apply_along_axis() 函數, axis =0, 時,為沿行,=1時,沿列

>>> np.apply_along_axis(np.mean, axis=0, arr=A)

array([ 0.31892036,? 0.32059507,? 0.5275357 ,? 0.56294685])

>>> np.apply_along_axis(np.mean, axis=1, arr=A)

array([ 0.34725639,? 0.52172109,? 0.428521? ])

>>> A

array([[ 0.37854916,? 0.07013463,? 0.16762009,? 0.77272168],

[ 0.39064676,? 0.79229944,? 0.57201198,? 0.33192621],

[ 0.18756517,? 0.09935115,? 0.84297504,? 0.58419266]])

條件和布爾數組

>>> A = np.random.random((4,4))

>>> A

array([[ 0.73033594,? 0.95318457,? 0.05115813,? 0.1413278 ],

[ 0.38830897,? 0.67513952,? 0.73892551,? 0.00472255],

[ 0.52383481,? 0.35105734,? 0.61480131,? 0.00726216],

[ 0.28354593,? 0.15196966,? 0.86462789,? 0.86654137]])

>>> A<0.5

array([[False, False,? True,? True],

[ True, False, False,? True],

[False,? True, False,? True],

[ True,? True, False, False]], dtype=bool)

>>> A[A<0.5]

array([ 0.05115813,? 0.1413278 ,? 0.38830897,? 0.00472255,? 0.35105734,

0.00726216,? 0.28354593,? 0.15196966])

形狀變換

reshape() 函數

ravel () 函數將二維數組變成一維數組

transpose() 交換行列

數組操作

vstack() 垂直入棧操作

hstack() 水平入棧操作

數組切分

hsplit() 水平分割

vsplit() 垂直分割

>>> A = np.arange(0,12).reshape(3,4)

>>> A

array([[ 0,? 1,? 2,? 3],

[ 4,? 5,? 6,? 7],

[ 8,? 9, 10, 11]])

>>> [b,c]= np.hsplit(A,2)

>>> b

array([[0, 1],

[4, 5],

[8, 9]])

>>> c

array([[ 2,? 3],

[ 6,? 7],

[10, 11]])

也可以指定axis 沿哪條軸分割

對象的副本

直接使用copy() 函數

>>> a

array([[ 0.93582073,? 0.36285637,? 0.1743055 ,? 0.73572584],

[ 0.57430482,? 0.86607796,? 0.73776101,? 0.12266299],

[ 0.59001065,? 0.38222194,? 0.06113438,? 0.01316895]])

>>> b=a.copy()

>>> b

array([[ 0.93582073,? 0.36285637,? 0.1743055 ,? 0.73572584],

[ 0.57430482,? 0.86607796,? 0.73776101,? 0.12266299],

[ 0.59001065,? 0.38222194,? 0.06113438,? 0.01316895]])

結構化數組

創建一個簡單的結構化數組

>>> structured = np.array([(1,'first', 0.5, 1+2j), (2, 'second', 1.5, 2+2j)], dtype=('int16,a6,float32, complex64'))>>> structuredarray([(1, 'first',? 0.5,? 1.+2.j), (2, 'second',? 1.5,? 2.+2.j)],? ? ? dtype=[('f0', '>> structured[1]

(2, 'second',? 1.5,? 2.+2.j)

數據文件讀入

保存

>>> a

array([[ 0.93582073,? 0.36285637,? 0.1743055 ,? 0.73572584],

[ 0.57430482,? 0.86607796,? 0.73776101,? 0.12266299],

[ 0.59001065,? 0.38222194,? 0.06113438,? 0.01316895]])

>>> np.save('a_data',a)

np.load('a_data.npy‘)

讀取文件中列表形式

CSV

np.getfromtxt('data.csv', delimiter=',', names=True) , (打開的文件名, 分隔符, 是否保存列標題) ,內容為空的項填充為nan 值

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容