numpy筆記
建立np陣列
import numpy as np
m = np.array([np.arange(2), np.arange(2)])
m
[[0, 1],
[0, 1]]
np.zeros((2,2)) # 建立一個值均為0的2*2矩陣
[[0., 0.],
[0., 0.]]
np.ones((1,2)) # 建立一個值均為1的1*2矩陣
[[1., 1.]]
np.full((2,2), 7) # 建立一個值均為7的2*2矩陣
([[7, 7],
[7, 7]]
np.eye(2) # 建立一個2*2單位矩陣
[[1., 0.],
[0., 1.]]
np.eye(3,k=1) # 第一個引數是矩陣的行/列數 # 第二個引數預設為0 # 若k>0,則從中心對角線起右上角第k條對角線全為1 # 若k<0,則從中心對角線起左下角第k條對角線全為1
[[0., 1., 0.],
[0., 0., 1.],
[0., 0., 0.]]
np.eye(4,k=2)
[[0., 0., 1., 0.],
[0., 0., 0., 1.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]
np.random.random((2,2))
[[0.04065736, 0.35996263],
[0.40312977, 0.84368045]]
改變陣列維度
a = np.arange(8)
a.resize(2,4)
a
[[0 1 2 3],
[4 5 6 7]]
a = np.arange(8).reshape(2,4) b = a.ravel() # 展平陣列 b[0] = -1 # ravel共享記憶體 a
[[-1, 1, 2, 3],
[ 4, 5, 6, 7]]
a = np.arange(8).reshape(2,4)
b = a.flatten() # 展平陣列
b[0] = -1 # flatten重新建立記憶體
a
[[0, 1, 2, 3],
[4, 5, 6, 7]]
a.T # 轉置,等同於a.transpose()
[[0, 4],
[1, 5],
[2, 6],
[3, 7]]
陣列的組合
a = np.arange(6).reshape(2,3) b = a * 2 # 左右拼接 print(np.hstack((a,b))) print(np.concatenate((a,b),axis=1))
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]]
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]]
# 上下拼接
print(np.vstack((a,b)))
print(np.concatenate((a,b),axis=0))
[[ 0 1 2]
[ 3 4 5]
[ 0 2 4]
[ 6 8 10]]
[[ 0 1 2]
[ 3 4 5]
[ 0 2 4]
[ 6 8 10]]
print(np.dstack((a,b))) # 深度組合,將一系列陣列沿著縱軸方向進行層疊組合
[[[ 0 0]
[ 1 2]
[ 2 4]]
[[ 3 6]
[ 4 8]
[ 5 10]]]
陣列的分割
a = np.arange(6).reshape(2,3)
np.split(a,3,axis=1) # 水平分成3個,等同於np.hsplit(a,3)
[[[0],
[3]],
[[1],
[4]],
[[2],
[5]]]
a = np.arange(6).reshape(2,3)
np.split(a,2,axis=0) # 垂直分成2個,等同於np.vsplit(a,2)
[([[0, 1, 2]]), [[3, 4, 5]])]
a = np.arange(6).reshape(1,2,3)
np.dsplit(a,3) # 深度方向分成3個,必須是三維陣列及以上
[[[[0],
[3]]],
[[[1],
[4]]],
([[[2],
[5]]]]
常用函式
a = np.array([[3,1,2],[0,5,4]])
np.sort(a,axis=1) # 按行升序
[[1, 2, 3],
[0, 4, 5]]
np.sort(a,axis=0) # 按列升序
[[0, 1, 2],
[3, 5, 4]]
-np.sort(-a,axis=1) # 按列降序
[[3, 2, 1],
[5, 4, 0]]
a = np.array([[3,1,2],[0,5,4]])
np.argmax(a) # 返回最大值的下標,可以理解為先展平成1維陣列,再尋找下標
4
b = np.array([np.nan, 2, 4])
print(np.argmax(b))
print(np.nanargmax(b)) # 忽略nan
0
2
a = np.array([[3,1,2],[0,5,4]])
np.argwhere(a <= 4) # 返回小於4的元素位置
[[0, 0],
[0, 1],
[0, 2],
[1, 0],
[1, 2]], dtype=int64)
a = np.arange(5)
indices = np.searchsorted(a, [-2,7]) # np.searchsorted(a,b) 返回將b插入a
#searchsorted函式:為指定的插入值尋找維持陣列排序的索引位置。該函式使用二分搜尋演算法。
#在不打亂a陣列排序結果基礎上插入b陣列,返回b陣列每個元素如果插入的話對應的位置。
print(indices)
print(np.insert(a, indices, [-2,7]))
[0 5]
[-2 0 1 2 3 4 7]
a = np.array([2,6,1,3])
print(np.median(a)) # 求中位數
print(np.mean(a)) # 求均值
print(np.var(a)) # 求方差
print(np.std(a)) # 求標準差
2.5
3.0
3.5
1.8708286933869707
np.diff(a) # 後一項減前一項
[ 4, -5, 2]
運算
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print("a.dot(b):\n", a.dot(b)) # 數乘
print("a @ b:\n", a @ b) # 數乘
print("a * b:\n", a * b) # 哈達瑪乘積 對應元素相乘
aMat = np.mat(a)
bMat = np.mat(b)
print("aMat * bMat:\n", aMat * bMat)
a.dot(b):
[[19 22]
[43 50]]
a @ b:
[[19 22]
[43 50]]
a * b:
[[ 5 12]
[21 32]]
aMat * bMat:
[[19 22]
[43 50]]