NumPy庫的核心是矩陣及其運算。
使用array()函數可以將python的array_like數據轉變成數組形式,使用matrix()函數轉變成矩陣形式。
基於習慣,在實際使用中較常用array而少用matrix來表示矩陣。
然后即可使用相關的矩陣運算了
import numpy as np a = [[1,2,3],[4,5,5],[4,5,5]] len = a.shape[0] #多維數組的行數 print(a.dtype) #輸出元素類型 #另外也還可以使用切片方式來處理數組
然后是涉及到的ufunc(universal function)運算,它是一種能對數組的每個元素進行操作的函數。NumPy內置的許多ufunc函數都是在C語言級別實現的,因此它們的計算速度非常快。
1 >>> x = np.linspace(0, 2*np.pi, 10) 2 # 對數組x中的每個元素進行正弦計算,返回一個同樣大小的新數組 3 >>> y = np.sin(x) 4 >>> y 5 array([ 0.00000000e+00, 6.42787610e-01, 9.84807753e-01, 6 8.66025404e-01, 3.42020143e-01, -3.42020143e-01, 7 -8.66025404e-01, -9.84807753e-01, -6.42787610e-01, 8 -2.44921271e-16])
有的通用運算函數有:
np.sin()
np.cos()
np.add(a,b)
a.sum(axis=0,1)#axis為0計算全部數據的和,為1則按行計算數據的和
等等其它矩陣可參與的數據計算。
a = array([[1,2,3],[2,3,4]])
array(list): 創建矩陣或高維向量,例如a = array([[0,1,2,3],[4,5,6,7]]),傳入參數也可以是元組
shape: 表示向量大小的元組,例如a.shape結果為tuple,形如(2,3)
ndim: 表示矩陣或高維向量的維數,例如矩陣a的a.ndim為2
size: 表示向量總元素數
itemsize: 表示元素所占字節數
nbytes: 表示向量所占字節數
real: 所有元素的實部,返回的還是矩陣形式
imag: 所有元素的虛部,返回的還是矩陣形式
flat: 用一維數組表示矩陣或高維向量(常用於順序遍歷)
T: 表示矩陣的轉置矩陣(也適用於高維向量),例如:a.T
zeros(shape): 創建全0矩陣或高維向量,例如a = zeros((2,3))
ones(shape):創建全1矩陣或高維向量,例如a = ones((2,3))
add(matrix):將矩陣對應元素相加,結果相當於直接用加號
dot(matrix)
矩陣乘法,注意必須滿足“能乘”的要求
如果是*,則需注意:
1 aaa = array([[10,9,8],[7,6,5],[42,33,2]]) 2 a = aaa.min(0) #取每一列的最小值,返回的是一個數組 3 aaa*aaa#相當於aaa**2: 4 5 #[[ 100, 81, 64], 6 # [ 49, 36, 25], 7 # [1764, 1089, 4]] 8 9 aaa*a #aaa每行元素分別與a相乘,結果為 10 11 #[[ 70, 54, 16], 12 # [ 49, 36, 10], 13 # [294, 198, 4]] 14 15 a*aaa #結果與上相同 16 3*aaa #aaa中每個元素乘以3
reshape(shape)
得到改變形狀的矩陣,例如a = array([[1,2,3],[4,5,6]]).reshape((3,2))的結果為[[1,2],[3,4],[5,6]]。注意矩陣的大小不能改變,即reshape的參數表示的矩陣元素數必須等於原矩陣的元素數。
transpose()
得到矩陣的轉置矩陣,a.transpose()相當於a.T
swapaxes(d1,d2)
調換給定的兩個維度
flatten()
返回對應一維向量,例如:
1 aaa = array([[10,9,8],[7,6,5],[42,33,2]]) 2 aaa.flatten() 3 #返回值為: 4 array([10, 9, 8, 7, 6, 5, 42, 33, 2])
tolist()
得到矩陣對象轉化為list的結果
1 aa = aaa.tolist() 2 aa返回為list型(每一行又是一個子list): 3 [[10, 9, 8], [7, 6, 5], [42, 33, 2]] 4 aa[0] 5 #返回為: 6 [10, 9, 8]
min(axis)
得到所有元素中的最小值。當給定axis值(min(0)或min(axis=0))時,在該坐標上求最小值(得到數組)
例如:
1 aaa = array([[10,9,8],[7,6,5],[42,33,2]]) 2 aaa.min() 3 返回為:aaa矩陣中所有元素的最小值 4 結果為:2 5 aaa.min(0) 6 返回為:aaa矩陣中所有列中元素的最小值 7 結果為:array([7, 6, 2]) 8 aaa.min(1) 9 返回為:aaa矩陣中所有行中元素的最小值 10 結果為:array([8, 5, 2])
max(axis)
得到所有元素中的最小值。缺省參數axis作用和min()相同
sum()
得到數組元素之和,得到的是一個數字。
也可以aaa.sum(axis),分別求每一行或者是每一列的元素之和
cumsum()
得到累計和,即依次加一個元素求和的一維數組。
例如:
1 aaa.cumsum() 2 結果為:array([ 10, 19, 27, 34, 40, 45, 87, 120, 122])
prod()
得到數組所有元素之積,是個數字。也可以aaa.sum(axis),分別求每一行或者是每一列的元素之積
cumprod()
得到累計積,例子形式與上面cumsum()相同,這兩個函數也都可以分坐標累計加和累計乘。
mean()
得到元素的平均數
all()
如果所有元素為真,返回真;否則返回假
any()
如果所有元素只要有一個真,返回真;否則返回假。
特征值
linalg.eigvals()
返回A的特征值
linalg.eig(A)
返回A的特征值和特征向量,例如(eval, evec) = linalg.eig(A),其中eval的對角元為A的各個特征值,evec對應各列是相應特征向量。
1 >>> a = array([[-1,1,0], 2 [-4,3,0], 3 [ 1,0,2]]) 4 >>> eval, evec = linalg.eig(a) 5 >>> eval 6 array([ 2., 1., 1.]) 7 >>> evec 8 array([[ 0. , 0.40824829, 0.40824829], 9 [ 0. , 0.81649658, 0.81649658], 10 [ 1. , -0.40824829, -0.40824829]])
即特征向量為λ1=2的(0,0,1)和λ2=λ3=1的(0.4,0.8,-0.4)