numpy陣列運算

2022-05-03 03:00:08 字數 3831 閱讀 9832

加、減、乘、除、指數運算、求倒數、取相反數、位運算   等各種運算都是在各個元素上分別進行的

加法》 a=numpy.array([2,4,5])

>>> b=numpy.array([1,1,1])

>>> a+b

array([3, 5, 6])

乘法》 a*b

array([2, 4, 5])

倒數》 1./a

array([ 0.5 , 0.25, 0.2 ])

相反數》 -a

array([-2, -4, -5])

平方 >>> a**2

array([ 4, 16, 25])

按位異或

>>> a^2

array([0, 6, 7])

指數運算

>>> numpy.exp(a)

array([ 7.3890561 , 54.59815003, 148.4131591 ])

真正的矩陣乘法需要用numpy.dot(a,b) 

>>> a=numpy.array([2,4,5])

>>> b=numpy.array([[1],[1],[1]])

>>> c=numpy.dot(a,b)

>>>c

array([11])

兩個資料維度不一致時,低維資料會自動進行維度的擴充

>>> x=numpy.array([1,1,1])

>>> w=numpy.array([[1,2,3],[4,5,6]])

>>> z=w*x

>>>z

array([[1, 2, 3],

[4, 5, 6]])

我們說numpy中的*表示矩陣相應位置上的元素分別相乘,可上例中w中2維的,而x才是1維。x的維度低,此時x會在第2個維度上自動擴充(即拷貝第一行的元素到第二行)。這等價於:

>>> x=numpy.array([[1,1,1],[1,1,1]])

>>> w=numpy.array([[1,2,3],[4,5,6]])

>>> z=w*x

>>>z

array([[1, 2, 3],

[4, 5, 6]])

同樣,加法運算低維的資料也會自動向高維以複製的方式進行擴充。

>>> a=numpy.array([2,3])

>>> b=1+a

>>>b

array([3, 4])

智慧型選擇維度進行擴充

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

>>> b=np.array([1.,2.])

>>> a/b

array([[ 1., 1.],

[ 3., 2.],

[ 5., 3.]])

>>> b=np.array([[1.,2.]])

>>> a/b

array([[ 1., 1.],

[ 3., 2.],

[ 5., 3.]])

>>> b=np.array([[1.],[2.],[3.]])

>>> a/b

array([[ 1. , 2. ],

[ 1.5 , 2. ],

[ 1.66666667, 2. ]])

我們看到,a是3*2的矩陣,numpy.ndarray的「/」操作是對應位置上的元素分別進行除操作。當b是1*2的矩陣時,b為了跟a對齊它會自動在axis=1的方向上進行擴充;當b是3*1的矩陣時,b為了跟a對齊它會自動在axis=0的方向上進行擴充

外積

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

>>> b=np.array([1,2])

>>>np.outer(b,a)

array([[ 1, 2, 3, 4, 5, 6],

[ 2, 4, 6, 8, 10, 12]])

>>> b=np.array([[1],[2]])

>>>np.outer(b,a)

array([[ 1, 2, 3, 4, 5, 6],

[ 2, 4, 6, 8, 10, 12]])

外積運算與兩個矩陣的shape無關,只與兩個矩陣中元素的多少有關。

c=np.outer(b,a)

b中有m個元素,a中有n個元素,則c的shape為(m,n),$c_=b中的第i個元素*a中的第j個元素$

一維陣列與二維陣列

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

>>> b=np.array([[1,2,3]])

>>>list(a)

[1, 2, 3]

>>>list(b)

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

>>>a.shape

(3,)

>>>b.shape

(1, 3)

>>>a.t

array([1, 2, 3])

>>>b.t

array([[1],

[2],

[3]])

a是一維陣列,b是二維陣列。a比較特殊:a的轉置還是它本身,而且a.shape在第2維上沒有值。

最後來乙個綜合練習,自己一步一步體會:

$$y=\frac}$$

>>> x=numpy.array([[1,2,3],[4,5,6],[7,8,9]])

>>> w=numpy.array([0.3,0.8,1.2])

>>> y=1.0/(1.0+numpy.exp(-w*x.t))

>>> y

array([[ 0.57444252, 0.96083428, 0.99977518],

[ 0.64565631, 0.98201379, 0.99993228],

[ 0.7109495 , 0.99183743, 0.9999796 ]])

注意一維陣列和只有一行的二維陣列的區別

>>> b=np.array([3,6])

>>> d=np.array([[3,6]])

>>> b.shape

(2,)

>>> d.shape

(1, 2)

>>> b[1]

6>>> d[0,1]

6

一維陣列轉置後其shape不變

>>> b.t.shape

(2,)

>>> d.t.shape

(2, 1)

通過切片取二維陣列的第i行時,x[i]和x[i,:]是等價的,得到的都是乙個一維陣列,而x[i:i+1,:]得到的是只有一行的二維陣列

>>> a=np.array([[2,4],[5,7]])

>>> a[0]

array([2, 4])

>>> a[0,:]

array([2, 4])

>>> a[0:1,:]

array([[2, 4]])

np.sun(ndarray)函式不指定axis引數時是對陣列中的所有元素求總和;指定axis引數時可以按行/按列求和,求和的結果相比於原陣列降低了乙個維度。

>>> np.sum(a)

18>>> np.sum(a,axis=0)

array([ 7, 11])

>>> np.sum(a,axis=1)

array([ 6, 12])

Numpy陣列運算

import numpy as np arr1 np.array 1,2,3 4,5,6 arr2 np.array 1,1,2 2,3,3 print arr1 print arr2 print arr1 arr2 兩個陣列的同位置元素相加 print arr1 arr2 兩個陣列的同位置元素相減...

numpy之陣列運算

陣列之邏輯運算 可以直接對陣列進行邏輯判斷,會返回相應的bool型別陣列 通用判斷函式 三元運算子 陣列之統計運算陣列與數之間的運算 會作用到陣列中的每乙個元素上。陣列與陣列之間的運算 廣播機制 陣列在進行向量化運算時,要求陣列的形狀是相等的。當形狀不相等的陣列執行算術運算的時候,就會出現廣播機制,...

numpy 陣列 矩陣乘法運算

為了區分三種乘法運算的規則,具體分析如下 import numpy as np函式作用 陣列和矩陣對應位置相乘,輸出與相乘陣列 矩陣的大小一致 1.1陣列場景 a np.arange 1,5 reshape 2,2 aarray 1,2 3,4 b np.arange 0,4 reshape 2,2...