論numpy中matrix 和 array的區別 - csdn部落格
2023年03月07日 16:26:55
numpy matrices必須是2維的,但是 numpy arrays (ndarrays) 可以是多維的(1d,2d,3d····nd). matrix是array的乙個小的分支,包含於array。所以matrix 擁有array的所有特性。
在numpy中matrix的主要優勢是:相對簡單的乘法運算符號。例如,a和b是兩個matrices,那麼a*b,就是矩陣積。
import
numpy
asnpa=
np.mat(
'4 3; 2 1')b
=np.mat
('1 2; 3 4'
)print(a
)# [[4 3]
# [2 1]]
print(b
)# [[1 2]
# [3 4]]
print(a
*b)# [[13 20]
# [ 5 8]]
matrix 和 array 都可以通過objects後面加.t
得到其轉置。但是 matrix objects 還可以在後面加.h
f得到共軛矩陣, 加.i
得到逆矩陣。
相反的是在numpy裡面arrays遵從逐個元素的運算,所以array:c 和d的c*d運算相當於matlab裡面的c.*d運算。
c=np
.array
([[4,3
],[2,
1]])d=
np.array
([[1,2
],[3,
4]])
print(c
*d)# [[4 6]
# [6 4]]
而矩陣相乘,則需要numpy裡面的dot命令 :
print(np
.dot(c
,d))# [[13 20]
# [ 5 8]]
**
運算子的作用也不一樣 :
print(a
**2)# [[22 15]
# [10 7]]
print(c
**2)# [[16 9]
# [ 4 1]]
因為a是個matrix,所以a
**2返回的是a*a,相當於矩陣相乘。而c是array,c
**2相當於,c中的元素逐個求平方。
問題就出來了,如果乙個程式裡面既有matrix 又有array,會讓人腦袋大。但是如果只用array,你不僅可以實現matrix所有的功能,還減少了程式設計和閱讀的麻煩。
當然你可以通過下面的兩條命令輕鬆的實現兩者之間的轉換:np.asmatrix
和np.asarray
對我來說,numpy 中的array與numpy中的matrix,matlab中的matrix的最大的不同是,在做歸約運算時,array的維數會發生變化,但matrix總是保持為2維。例如下面求平均值的運算
>>>m =
np.mat([[1,
2],[2,
3]])
>>>
mmatrix
([[1,2
],[2,
3]])
>>>
mm =m.
mean(1
)>>>
mmmatrix
([[1.5],[
2.5]])
>>>mm.
shape(2
,1)>>>m -
mmmatrix
([[-
0.5,
0.5],
[-0.5
,0.5
]])
對array 來說
>>>a =
np.array
([[1,2
],[2,3
]])>>>
aarray
([[1,2
],[2,
3]])
>>>
am =a.
mean(1
)>>>am.
shape(2
,)>>>
amarray
([1.5
,2.5
])>>>a -
am #wrong
array
([[-
0.5,
-0.5],[
0.5,
0.5]])
>>>a -
am[:,np.
newaxis
]#right
array
([[-
0.5,
0.5],
[-0.5
,0.5
]])
NumPy中ndarray和matrix的四則運算
numpy中最重要的類是ndarray,顧名思義,即多維陣列。import numpy as np行向量 a np.array 1,2,3 a.shape 3l,列向量 b np.array 1 2 3 b.shape 3l,1l 二維矩陣 m np.array 1,2,3 4,5,6 7,8,9 ...
numpy中matrix 和 array的區別
numpy matrices必須是2維的,但是 numpy arrays ndarrays 可以是多維的 1d,2d,3d nd matrix是array的乙個小的分支,包含於array。所以matrix 擁有array的所有特性。所以 在sklearn 中如果傳入的特徵只有乙個,要使用x.valu...
numpy中matrix和array的區別
import numpy as np a np.mat 4 3 2 1 b np.mat 1 2 3 4 print a 4 3 2 1 print b 1 2 3 4 print a b 13 20 5 8 c np.array 4,3 2,1 d np.array 1,2 3,4 print c...