簡單運算
現在有有個需求,給定一個數組,讓數組中每一個數乘以2,怎么做呢
n = 10 L = [i for i in range(n)] L # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 * L # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
A = [] for e in L: A.append(2*e) A # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
L = np.arange(n) 2 * L # array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
各種寫法性能比較
n = 1000000 L = [i for i in range(n)] %%time A = [] for e in L: A.append(2*e) """ CPU times: user 253 ms, sys: 30 ms, total: 283 ms Wall time: 303 ms """ %%time A = [2*e for e in L] """ CPU times: user 93.6 ms, sys: 25.8 ms, total: 119 ms Wall time: 128 ms """ L = np.arange(n) %%time A = np.array(2*e for e in L) """ CPU times: user 15.1 ms, sys: 8.97 ms, total: 24.1 ms Wall time: 24.8 ms """ %%time A = 2 * L """ CPU times: user 15.1 ms, sys: 8.97 ms, total: 24.1 ms Wall time: 24.8 ms """
NumPy’s UFuncs (Universal Functions)
全稱通用函數(universal function),是一種能夠對數組中所有元素進行操作的函數
- 四則運算:加(+)、減(-)、乘(*)、除(/)、冪(**):數組間的四則運算表示對每個數組中的元素分別進行四則運算,所以形狀必須相同
- 比較運算:>、<、==、>=、<=、!= :比較運算返回的結果是一個布爾數組,每個元素為每個數組對應元素的比較結果。
- 邏輯運算:np.any函數表示邏輯“or”,np.all函數表示邏輯“and” :運算結果返回布爾值
X = np.arange(1, 16).reshape((3, 5)) """ array([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]) """ # 每個元素 + 1 X + 1 # 每個元素 - 1 X - 1 # 每個元素 * 2 X * 2 # 每個元素 / 2 X / 2 # 每個元素的平方 X ** 2 # 求余 X % 2 # 倒數 1 / X
還有下面等一系列方法
np.abs(X)
np.sin(X)
np.cos(X)
np.tan(X)
np.arctan(X)
np.exp(X)
np.exp2(X)
np.power(3, X)
np.log(X)
np.log2(X)
np.log10(X)
矩陣間運算
A = np.arange(4).reshape(2, 2) B = np.full((2, 2), 10) A + B A - B # ×乘,每個對應位置相乘 A * B # .乘,C11 = A的第一行*B的第一列,先乘后加 A.dot(B) # 轉置 A.T # 返回自身的共軛轉置 A.H # 返回自身的逆矩陣 A.I # 返回自身數據的2維數組的一個視圖 A.A
向量和矩陣的運算
加法
A = np.arange(4).reshape(2, 2) v = np.array([1, 2]) v + A """ array([[1, 3], [3, 5]]) """
乘法
v * A """ array([[0, 2], [2, 6]]) """ v.dot(A) # array([4, 7]) A.dot(v) # array([2, 8])
矩陣的逆與偽逆
矩陣的逆
B = np.linalg.inv(A) A.dot(B) """ array([[1., 0.], [0., 1.]]) """
矩陣的偽逆
X = np.arange(16).reshape((2, 8)) pinvX = np.linalg.pinv(X) X.dot(pinvX) """ array([[ 1.00000000e+00, -2.77555756e-16], [ 1.69309011e-15, 1.00000000e+00]]) """
矩陣的偽逆又被稱為“廣義逆矩陣”
Numpy 中arg運算
x = np.random.normal(0, 1, 1000000) np.argmin(x) #獲取最小值的下標 np.argmax(x)