numpy
import numpy as np # numpy數值計算,支持維度數組和矩陣計算
# 特殊創建矩陣方式
x = np.zeros((2, 3)) # zeros 創建全是 0 的數組矩陣,參數是數組類型
y = np.ones(3) # ones 創建全是 1 的數組矩陣
z = np.full((3, 2), 3) # full 創建定值數組矩陣,如創建3行2列,數值全是3的矩陣
s = np.eye(5, k=2) # eye 創建對角矩陣,對角值為 1 ,k值表示從第幾列開始對角相同,不填默認為 0
w = np.random.random((2, 3)) # 創建隨機值的矩陣
# 初始化創建矩陣方式
a = np.array([[1, 2, 3], [3, 4, 5]],dtype=np.int64) # 初始化一個數組成矩陣,dtype= 設置數據類型
print(a.shape) # 查看這個矩陣是幾行幾列
a1 = a[[1, 0, 1], [0, 1, 1]] # 索引結果是[3,2,4],前后保持一一對應
a2 = [a[1, 0], a[0, 1], a[1, 1]] # 與上面結果相同
rows = np.array([[0, 0], [1, 1]]) # 索引矩陣的行
cols = np.array([[0, 1], [0, 1]]) # 索引矩陣的列
print(a[rows, cols]) # 索引到矩陣的對角值,索引行,列一一對應:[0,0],[0,1],[1,0],[1,1]
print(a > 2) # 判斷矩陣中每個元素是否大于2,返回的是布爾值
print(np.sum(a)) # 矩陣中每個元素的求和
print(np.sum(a, axis=0)) # axis = 0 矩陣第一維度求和,[1+3, 2+4, 3+5]
print(np.sum(a, axis=1)) # axis = 1 矩陣第二維度求和,[1+2+3, 3+4+5]
"""
這是二維數組,所以axis=1時就到了最后的維度,將數組最小單位元素相加就可
如是三維數組[[[1,2,3],[3,4,5]],[[6,7,8],[8,9,10]]]
axis=0時求和:[[1+6,2+7,3+8],[3+8,4+9,5+10]]
axis=1時求和:[[1+3,2+4,3+5],[6+8,7+9,8+10]]
axis=2時求和:[[1+2+3,3+4+5],[6+7+8,8+9+10]]
以此類推,數組中每個維度的元素對應元素求和
本質是數組中每個元素相加,
如這個三維數組有兩個元素,分別為[[1,2,3],[3,4,5]] 和 [[6,7,8],[8,9,10]]]對應相加,
每個元素中又有兩個子元素,分別為[1,2,3] 和 [3,4,5]每個元素中兩子元素對應相加,
每個子元素中又有三個子元素,[1,2,3]則這三個子元素相加
"""
"""
廣播(broadcast):是numpy對不同形狀(shape)的數組進行數值計算
當兩個數組的shape相同,即a.shape==b.shape時,a*b,就是將對應位相乘
但當兩個數組的shape不同,則會觸發廣播機制,觸發后會向最長的軸長看齊,不足的補足
廣播機制原則:1、兩個數組維度不同,但后緣維度的軸長度相同
2、數組維度相同,但其中一個數組軸長為1
如:a是(3,1)的數組,b是(1,3)的數組,運算得到的數組是(3*3)的數組
a為(3,3)數組,b為(2,3)數組,則不滿足廣播機制原則,不會觸發
"""
數組維度不同,后緣軸長相同


數組維度相同,其中一個軸長為1

迭代,for循環,使用nditer迭代出每個元素
# a = [[1, 2, 3], [3, 4, 5]]
for i in np.nditer(a):
print(i) # 結果是1,2,3,3,4,5
for i in np.nditer(a.T): # .T 行列轉置
print(i) # 結果是1,2,3,3,4,5
for i in np.nditer(a.T,order='F'): # order='F'列序排序
print(i) # 結果是1,2,3,3,4,5
for i in np.nditer(a.T.copy(order='C')): # order='C'行序排序
print(i) # 結果是1,3,2,4,3,5
for i in np.nditer(a,op_flags=['readwrite']): # 默認是readonly,使用op_flags設置讀寫性
i[...] = i * 2
print(a)
廣播迭代,如果兩個數組可廣播,則可以同時迭代他們,迭代按廣播后的維度軸長迭代
for i,j in np.nditer([s1,s2]):
print('%d:%d' % (i, j))
外部迭代
"""
nditer擁有flags參數,可接受下列值
c_index 按照c順序迭代
f_index 按照Fortran順序
multi_index 每次迭代可以跟蹤一種索引類型
external_loop 以一維數組形式迭代
"""
for i in np.nditer(a,flags=['external_loop'],order='F'):
print(i)

浙公網安備 33010602011771號