保留初心,砥礪前行
先定義兩個(gè)NumPy array
A = np.array([[1, 2, 3],
[2, 3, 4]]).astype(np.float32)
B = np.array([[2, 3, 4],
[3, 4, 5]]).astype(np.float32)
-
算數(shù)運(yùn)算:
Subtraction
print A - B
print np.subtract(A, B)
[[-1. -1. -1.]
[-1. -1. -1.]]
[[-1. -1. -1.]
[-1. -1. -1.]]
Addition
print A + B
print np.add(A, B)
[[ 3. 5. 7.]
[ 5. 7. 9.]]
[[ 3. 5. 7.]
[ 5. 7. 9.]]
Division
print A / B
print np.divide(A, B)
[[ 0.5 0.66666669 0.75 ]
[ 0.66666669 0.75 0.80000001]]
[[ 0.5 0.66666669 0.75 ]
[ 0.66666669 0.75 0.80000001]]
Multiplication细移,只是對(duì)應(yīng)的元素相乘搏予,并不是真正的矩陣乘法
print A * B
print np.multiply(A, B)
[[ 2. 6. 12.]
[ 6. 12. 20.]]
[[ 2. 6. 12.]
[ 6. 12. 20.]]
dot product 點(diǎn)積,這是真正的矩陣乘法弧轧,與上邊的操作相對(duì)應(yīng)
print np.dot(A, np.transpose(B))
print np.transpose(B)
[[ 20. 26.]
[ 29. 38.]]
[[ 2. 3.]
[ 3. 4.]
[ 4. 5.]]
把每個(gè)元素nij變成以e為底雪侥,nij為指數(shù)的形式——enij
print np.exp(A)
[[ 2.71828175 7.38905621 20.08553696]
[ 7.38905621 20.08553696 54.59814835]]
把每個(gè)元素開(kāi)方
print np.sqrt(A)
[[ 1. 1.41421354 1.73205078]
[ 1.41421354 1.73205078 2. ]]
-
比較:
兩個(gè)矩陣之間的對(duì)應(yīng)元素大小的比較
print A == B
print A < B
print A < 3
[[False False False]
[False False False]]
[[ True True True]
[ True True True]]
[[ True True False]
[ True False False]]
兩個(gè)矩陣在矩陣層面的比較
print np.array_equal(A, B)
False
-
聚合函數(shù):
這里包含求所有元素(或按照行或列劃分的)和,所有元素(或按照行或列劃分的)中的最大最小值精绎,元素累加速缨,平均數(shù),中位數(shù)代乃,相關(guān)系數(shù)旬牲,標(biāo)準(zhǔn)差等仿粹。
關(guān)于相關(guān)系數(shù):相關(guān)表和相關(guān)圖可反映兩個(gè)變量之間的相互關(guān)系及其相關(guān)方向,但無(wú)法確切地表明兩個(gè)變量之間相關(guān)的程度原茅。于是吭历,著名統(tǒng)計(jì)學(xué)家卡爾·皮爾遜設(shè)計(jì)了統(tǒng)計(jì)指標(biāo)——相關(guān)系數(shù)(Correlation coefficient)。相關(guān)系數(shù)是用以反映變量之間相關(guān)關(guān)系密切程度的統(tǒng)計(jì)指標(biāo)擂橘。
```
print np.min(A) #A中的最小值
print np.sum(A), np.sum(A, axis=1) #A所有元素求和晌区,橫軸元素求和
print np.max(A, axis=1) #每一個(gè)橫軸的最大值
print np.cumsum(A), np.cumsum(A, axis=1) #按元素累加,每一個(gè)橫軸按元素累加
print np.mean(A) #求所有元素的平均值
print np.median(A) #中位數(shù)
print np.corrcoef(A) #相關(guān)系數(shù)
print np.std(A) #標(biāo)準(zhǔn)差
其中通贞,np.cumsum累加可能不是很清晰朗若,看下邊的例子:
print np.cumsum(A), np.cumsum(A, axis=1)
[ 1. 3. 6. 8. 11. 15.] [[ 1. 3. 6.]
[ 2. 5. 9.]]
可以看出np.cumsum(A)的每一個(gè)元素是A中這個(gè)位置的元素(包括自身)累加到第一個(gè)元素的值。
- ###排序:
np.sort()
Return a sorted copy of an array.
>`Parameters: `
***a*** : array_like
Array to be sorted.
**axis **: int or None, optional
Axis along which to sort. If None, the array is flattened before sorting. The default is -1, which sorts along the last axis.
**kind** : {‘quicksort’, ‘mergesort’, ‘heapsort’}, optional
Sorting algorithm. Default is ‘quicksort’.
**order** : str or list of str, optional
`Returns: `
**sorted_array** : ndarray
Array of the same type and shape as *a*.
```
C = np.array([1,3,5,2,34,5,6,3,5,8])
print np.sort(C)
[1 2 3 3 5 5 5 6 8 34]```
- ###復(fù)制:
####copy
首先需要注意的是昌罩,B = A并不意味著copy了一個(gè)與A相同的array并賦值給B捡偏,而是B也指向了A指向的那個(gè)array,如果此時(shí)對(duì)A進(jìn)行操作峡迷,則B也會(huì)產(chǎn)生同樣的變化银伟,因?yàn)樗鼈儽緛?lái)就是同一個(gè)array。
C = np.array([1, 2, 3, 4, 6])
D = C.copy()
這是deep copy 绘搞,可以看做是真正的copy彤避,如上代碼所示,將C中的內(nèi)容復(fù)制到D中夯辖,C與D雖然內(nèi)容完全一樣琉预,但是是兩個(gè)array。
####view
>Different array objects can share the same data. The view method creates a new array object that looks at the same data.
事實(shí)上蒿褂,沒(méi)有任何數(shù)據(jù)類型是固定的圆米,主要取決于如何看待這片數(shù)據(jù)的內(nèi)存區(qū)域。
在numpy.ndarray.view中啄栓,提供對(duì)內(nèi)存區(qū)域不同的切割方式娄帖,來(lái)完成數(shù)據(jù)類型的轉(zhuǎn)換,而無(wú)須要對(duì)數(shù)據(jù)進(jìn)行額外的copy昙楚,來(lái)節(jié)約內(nèi)存空間近速。
我自己的理解是,view生成的array和被view的array的data實(shí)際上指向的是同一塊內(nèi)存堪旧,也就是相同的一塊數(shù)據(jù)削葱。不同點(diǎn)在于view可以表示成不同的shape或type。這樣比copy節(jié)省內(nèi)存淳梦。
接下來(lái)看示例就可以明白個(gè)大概析砸。
C = np.array([1, 2, 3, 4, 6])
D = C.view()
print D is C
print D.base is C
False
True
C = np.array([1, 2, 3, 4, 6])
D = C.view(np.float32)
print C
print D
[1 2 3 4 6]
[ 1.40129846e-45 0.00000000e+00 2.80259693e-45 0.00000000e+00
4.20389539e-45 0.00000000e+00 5.60519386e-45 0.00000000e+00
8.40779079e-45 0.00000000e+00]
他們其實(shí)共享的是同一個(gè)內(nèi)存中的同一個(gè)數(shù)據(jù),只是表示出來(lái)的type不同而已爆袍。
C = np.array([1, 2, 3, 4, 6])
D = C.view()
C[0] = 3
print C
print D
[3 2 3 4 6]
[3 2 3 4 6]
當(dāng)array C中的某個(gè)元素變化首繁,可以看到array D中的相應(yīng)元素也發(fā)生了變化作郭。
好了,以上就是今天的全部?jī)?nèi)容了蛮瞄,歡迎討論指正所坯。
>[相關(guān)鏈接:NumPy(1)簡(jiǎn)介谆扎,基礎(chǔ)屬性挂捅,數(shù)組創(chuàng)建(ones,zeros堂湖,empty闲先,arange,linespace)](http://www.reibang.com/p/5472800d7c36)
>[相關(guān)鏈接:NumPy(2)reshape无蜂,dot伺糠,flat](http://www.reibang.com/p/949b1f8750a9)
>[相關(guān)鏈接:NumPy(3)full,eye斥季,empty训桶,random](http://www.reibang.com/p/973bceed75c5)