a = [[1,2,3], [4,5,6]]
b = np.array(a, dtype=int/int32/float/float32)
b.shape
b.size
b.ndim
c=np.zeros((2,3)) #2行3列, 0矩陣
c=np.ones((2,3)) #2行3列 , 1矩陣
c=np.empty((2,3)) #幾乎接近於0的矩陣
c = np.arange(10,20,2) #和py里的range一樣, 2是步長
c = np.arange(12).reshape((3,4))
c = np.linspace(1, 10, 20) #生成20個數字
c = np.linspace(1,10,20).reshape((2,3))
運算
a = np.array([10,20,30,40])
b = np.arange(4)
c = a - b #[10,19,28,37]
c = a+b # [10,21,32,43]
c = b**2 #平方 [0,1,4,9]
c = np.sin(a) #對 a每個求sin,類似 cos, 等三角函數
print(b<3) # [True, True, True, False]
print( b==2)
a = np.array([[1,1], [0,1]])
b = np.arange(4).reshape((2,2)) [[0,1], [2,3]]
c = a*b #逐個相乘 [[0,1], [0, 3]]
確認矩陣是否可以相乘。只有第一個矩陣的列的個數等於第二個矩陣的行的個數,這樣的兩個矩陣才能相乘
矩陣A和矩陣B相乘得到的矩陣,與矩陣A有相同的行數,與矩陣B有相同的列數。
計算第一個“點”。要計算矩陣中的第一個“點”,你需要用第一個矩陣第一行的第一個數乘以第二個矩陣第一列的第一個數,第一行的第二個數乘以第一列的第二個數,第一行的第三個數乘以第一列的第三個數,然后將這三個結果加到一起,得到第一個點。
++++++++++++++++++
用左邊矩陣的第一行,逐個乘以右邊矩陣的列,第一行與第一列各個元素的乘積相加,第一行與第二列的各個元素的乘積相加。。。。
第二行也是,逐個乘以右邊矩陣的列。。。。
第三行。。。
+++++++++++++++++
c = np.dot(a, b) #矩陣乘法 np.matmul [ [2,4], [2,3] ] 必須是正方形矩陣
c = a.dot(b) #和上面一樣
a = np.random.random((2,4)) #2行4列的隨機數
a = np.sum(a, axis=1) #列的和, axis=0是行的和
np.sum, np,min, np.max,
運算222222222222222222222222222
a = np.arange(2,14).reshape((3,4))
np.argmin(a) #a最小值索引 = 0, 第1個(0位)
np.argmax(a) # =11, 第12個
np.mean(a) #平均值 或者
a.mean() 和上面一樣 7.5
np.average(a) 和上面一樣, 老版本指令 7.5
np.median(a) 中位數 7.5
np.cumsum(a) 累加數[2,5,9,14,20,27,35,44,54,65,77,90] 雖然原始a是多行多列, 值只有一行
np.diff(a) 累差[[1,1,1], [1,1,1],[1,1,1]] 相鄰2個數的差 4列變成了3列
np.nonzero(a) (array([0,0,0,0,1,1,1,1,2,2,2,2]), array([1,2,3,4,0,1,2,3,0,1,2,3]))
np.sort(a) 排序 逐行排, 每行之間不干預
np.transpose(a) 矩陣反向, 行變成列, 列變成行.
a.T 和上面一樣, 行變成列, 列變成行.
(a.T).dot(a)
np.clip(a, 5, 9) 使結果里,小於5的等於5, 大於9的等於9
np.mean(a, axis=0) 對列進行計算, axis=1對行計算
索引.....................................................................................................
a = np.arange(3,15).reshape((3,4))
a[2][3]
a[2,3] 和上面一樣的功能
a[2, :] 第2行的所有數
for row in a:
print(row)
for column in a.T: #轉置后迭代行, 也就是原始的列
print(column)
a.flatten() 按個返回. a.flat 迭代器
for item in a.flat: #矩陣轉成單行
print(item)
array的合並.........................................................................................
a = np.array([1,1,1])
b = np.array([2,2,2])
np.vstack((a,b)) [[1,1,1], [2,2,2]] 合並了 a+b不是合並而是加, vertical, 不需要axis
np.hstack((a,b)) 2個的合並??也可以3以上個合並.. horizontal
a[np.newaxis, :] 對a加了一個維度
a[: , np.newaxis] 對 a加縱向的維度
c = np.concatenate((a,b,b,a), axis=0) 0緯度上進行合並 可以進行多個的合並.
array的分割..........................................................................................
a = np.arange(12).reshape((3,4))
np.split(a, 2, axis=1) 分2塊, 縱向分
np.array_split(a, 3, axis=1) 進行不等項的分割
np.vsplit(a, 3) 不需要axis了,因為vertical
np.hsplit(a, 2)
array的復制.............................................................................................
a = np.arange(4)
b=a
c=a
d=b
input: b is a, result: true
a里面的改變, b, c都會一起改變, d也會改變 d is a : true
d改變后, a,b,c也會改變
b = a.copy() #deep copy 賦值但是沒有關聯