numpy.array 中的運算


簡單運算

  現在有有個需求,給定一個數組,讓數組中每一個數乘以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) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM