目錄html
苦numpy久矣!python
Numpy 教程數組
import numpy as np
屬性 | 解釋 |
---|---|
ndarray.ndim | 返回ndarray的軸數,向量軸爲1,矩陣是2,以此類推 |
ndarray.shape | 返回ndarray的形狀(n,m) |
ndarray.size | 返回ndarray的大小,即元素的個數 |
ndarray.dtype | 返回ndarray的數據類型 |
ndarray.itemsize | 返回數據類型所佔位數? |
ndarray.data |
a = np.arange(15).reshape(3, 5) a a.shape a.ndim a.dtype.name a.itemsize a.size type(a) b = np.array([6, 7, 8]) b type(b)
a = np.array(1,2,3,4) # WRONG a = np.array([1,2,3,4]) # RIGHT
c = np.array([[1, 2], [3, 4]], dtype = complex)
默認dtype=float.64app
np.zeros((3,4)) np.ones((2,3,4), dtype = np.int16) np.empty((2,3)) #這玩意兒輸出的狀況視內存而定,我輸出的和上面的同樣了。
np.zeros_like() np.ones_like() np.empty_like()
注意:連數據類型一併複製的
dom
np.arange(10, 30, 5) #array([10, 15, 20, 25]) 沒有30, 跟range同樣
np.arange() 的步長還能夠爲浮點數,這是range()所不具有的,不過教程並不推薦這種作法(彷佛是由於不穩定)。函數
np.arange(0, 2, 0.3)
np.linspace(0, 2, 9) #array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
*.rand() [0,1]的均勻分佈ui
np.random.rand(3, 2, 2)
.randn() 標準正態分佈
.randn() * \(\sigma\) + \(\mu\) 服從 \(\mathcal{N}(\mu,\sigma^2)\)spa
ndarray裏面的 + - * / **都是元素對元素的。
code
a1 = np.arange(8) b1 = np.arange(8) a2 = a1.reshape(2, 4) b2 = b1.reshape(4, 2) c1 = np.arange(2) a1 @ b1 #140 a1.dot(b1) # 140 #a2 @ a2 | a2.dot(a2) Error a2 @ b2 #array([[28, 34], [76, 98]]) a2.dot(b2) #array([[28, 34], [76, 98]]) #a2 @ c1 | a2.dot(c1) Error b2 @ c1 #array([1, 3, 5, 7]) b2.dot(c1) #array([1, 3, 5, 7])
1.出現最後3個的緣由:c1.shape: (2, )htm
注意:倆個ndarray 作運算,「粗糙」的服從更加精準的。
都有個共同的關鍵字: axis
axis = 0 做用於列
axis = 1 做用於行
ndarray.cumsum() 累加和
a = np.arange(10) ** 3 #array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729], dtype=int32) a[2] a[2:5] a[:6:2] a[: :-1] for i in a: print(i)
與list同樣(沒看出啥差異)
注意:多維的時候,c[1],就當成list來理解。
多維狀況下的迭代,也能夠用list來理解,就是一層層(一個軸一個軸)地往下走。
注意:上面的方法不改變數組自己 也能夠np.*()
.ravel() #按行排列,返回一維數組 (C-style 啥意思不明白)
.T 轉置
和reshape()不一樣,用來改變對象自己
和列表和字典同樣。
因爲上面出現的狀況,有些時候須要非對象綁定的複製(本身取的名字),就是a,b指向的內存並不是同一個。
比view()更極端 這點和list就不同了(list環境下是淺拷貝)
不懂
out 關鍵字按照教程打出錯了,不知爲什麼。
關於out部分仍是出錯
注意:diag()的時候有毛病啊,有毛病的啊,不曉得爲何了,你妹!
只能用於一維的數組,且元素是非負整數