python中ndarray和matrix
1. 定義ndarray和matrix
from numpy import *a = mat([[1,2],[3,4]]) b = mat([[5,6],[7,8]]) c = array([1,2],[3,4]) d = array([5,6],[7,8])看看輸出他們會不會有什么區別
print(a) print(c)>>[[1 2][3 4]] [[1 2][3 4]] #發現輸出的matrix和array是一模一樣的 print(type(a)) print(type(c))>> <class 'numpy.matrix'><class 'numpy.ndarray'>2. ndarray可以是任意維數,matrix只能是2維
A = array([[[1,2]]]) #正常不報錯 B = mat([[[1,2]]]) #報錯>>ValueError: matrix must be 2-dimensional3. 乘法
3.1 ndarray
3.1.1 叉乘
print(c) print(d) print(np.dot(c,d))>>[[1 2][3 4]][[5 6][7 8]][[19 22][43 50]] #可以看出ndarray也可以像矩陣一樣進行叉乘,但需要滿足矩陣叉乘的條件(第一個矩陣的列數等于第二個矩陣的行數)3.1.2 普通乘法
print(c) print(d) print(c*d)>>[[1 2][3 4]] [[5 6][7 8]] [[ 5 12][21 32]] #普通乘法是對應位置元素相乘3.2 matrix
3.2.1 叉乘
print(a) print(b) print(np.dot(a,b))>>[[1 2][3 4]][[5 6][7 8]][[19 22][43 50]] #矩陣叉乘3.2.2 普通乘法
print(a) print(b) print(a*b)>>[[1 2][3 4]][[5 6][7 8]][[19 22][43 50]] #這里發現對于矩陣運算符"*"直接對應的是叉乘,和np.dot()效果相同 print(a) print(b) print(np.multiply(a,b))>>[[1 2][3 4]][[5 6][7 8]][[ 5 12][21 32]] #如果非要對矩陣進行普通乘法,可以通過np.multiply()實現那么ndarray和matrix能否混合做乘法呢,結果是點乘還是叉乘呢?
print(a) print(b) print(a*d)>>[[1 2][3 4]] [[5 6][7 8]] [[19 22][43 50]] #可以對matrix和ndarray進行混合乘法,這里的運算符"*"是叉乘當然啦也可以通過np.multiply()對matrix和ndarray進行點乘
print(a) print(b) print(np.multiply(a,d))>>[[1 2][3 4]][[5 6][7 8]][[ 5 12][21 32]]4. ndarray和matrix互相轉換
4.1 matrix → ndarray
使用matrix對象的A屬性或者np.asarray()方法
e = a.A f = np.asarray(a) print(type(e)) print(e) print(type(f)) print(f)>><class 'numpy.ndarray'> [[1 2][3 4]] <class 'numpy.ndarray'> [[1 2][3 4]] #這兩種方法都可以將matrix轉化為ndarray但是需要注意注意通過轉化得到的ndarray(在這里是e和f)和原始matrix(這里是a)共享內存空間,修改了a之后e和f的值也會被修改
a[1,1] = 2 print(e) print(f)>>[[1 2][3 2]] [[1 2][3 2]] #在修改了a中元素的值后e,f的值都隨之改變當然了,在改變e或f的值后,a的值也會隨之改變
e[1,1] = 3 print(a)>>[[1 2][3 3]]4.2?ndarray?→?matrix
使用np.asmatrix()方法
e = np.asmatrix(c) print(e)>>[[1 2][3 4]]同樣的,通過轉化得到的matrix和原始ndarray共享內存空間
5. ndarray和matrix的其他區別
5.1 matrix更多的操作方法
matrix 和 array 都可以通過objects后面加.T 得到其轉置。但是 matrix objects 還可以在后面加 .H f得到共軛矩陣, 加 .I 得到逆矩陣。
5.2 **運算符
** 運算符的作用也不一樣 :因為a是個matrix,所以a**2返回的是a*a,相當于矩陣相乘。而c是array,c**2相當于,c中的元素逐個求平方
5.3 matrix維數總保持2維
ndarray與matrix的最大的不同是,在做歸約運算時,ndarray的維數會發生變化,但matrix總是保持為2維。例如下面求對行求平均值的運算
print("matrix") print(a) print(a.mean(1)) print("ndarray") print(c) print(c.mean(1))>>matrix [[1 2][3 4]] [[1.5][3.5]] ndarray [[1 2][3 4]] [1.5 3.5]參考:https://blog.csdn.net/lylclz/article/details/79843437
轉載于:https://www.cnblogs.com/RB26DETT/p/10974966.html
總結
以上是生活随笔為你收集整理的python中ndarray和matrix的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好程序员分享SpringBoot须掌握的
- 下一篇: linux 文件属性文件权限