numpy中最基本(默認)的類型是array,他的相關操做都是按元素操做的即用做數值計算當中(按元素操做有+,-,,/,*等)。相乘舉例:數組
from numpy import * >>> a=array([1,2]) >>> a array([1, 2]) >>> b=array([2,3]) >>> b array([2, 3]) >>> c=a*b >>> c array([2, 6]) >>> dot(a,b) 8
兩個array的相乘*指的是對應元素的相乘;兩個array的dot表示矩陣的相乘。數據結構
把array轉換爲matrix用asmatrix()函數
多數numpy函數返回的是array類型,不是matrix類型。spa
在numpy中的特殊類型,是做爲array的子類出現,因此繼承了array的全部特性而且有本身的特殊的地方,專門用來處理線性代數操做(*表示矩陣的相乘,可是對於兩個matrix的除/則表示對應元素的相除。)。乘法舉例如:code
「繼承
` >>> m=mat([2,3]) >>> m matrix([[2, 3]]) >>> n=([1,2]) >>> n [1, 2] >>> p=m*n Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 341, i n __mul__ return N.dot(self, asmatrix(other)) ValueError: objects are not aligned >>> dot(m,n) matrix([[8]]) >>> multiply(m,n) matrix([[2,6]])
** 兩個matrix相乘*錯誤緣由是m的列不等於n的行,也即不對齊(aligned),若對齊了,則是對應元素的相乘,返回一個matrix;兩個matrix的*表示是兩個矩陣的相乘。兩個matrix的dot表示矩陣相乘。兩個matrix的multiply表示對應元素的相乘。** - matrix中.H,.A,.I表示共軛,轉置,逆矩陣。 - 把matrix轉換爲array用asarray() - asanyarray()根據和你的輸入的類型保持一致。 ## array和matrix的一個很難理解的點 ## 這裏會涉及到rank的概念,在線性代數(math)rank表示秩,可是必須明確的是在numpy裏rank不是表示秩的概念,是表示維數的概念,這個理解的話須要看此文章:對於多維arrays的數據結構解釋: [多維arrays數據結構理解][1] 這裏暫時理解爲秩,雖然這樣理解是錯誤的,可是能夠說的通一些事情。(在實際的array和matrix裏,英文裏介紹的關於rank就用線性代數的秩來理解,可是英文會出現dimensions等於多少等,要求matrix的dimesions必須爲2,這裏其實指的就是秩,dimensions纔是在numpy裏的真實的理解形式) array要求秩爲1(N*1,1*N等)或者大於2 matrix要求秩必須爲2(rank必須爲2) - 下面是關於ndim和size的理解:
>>> a array([1, 2]) >>> b array([[1, 2], [2, 3]]) >>> c matrix([[1, 2, 3, 4], [2, 3, 4, 5]]) >>> d array([[1, 2, 3, 4], [2, 3, 4, 5]]) >>> e matrix([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]) >>> a.size 2 >>> a.ndim 1 >>> b.size 4 >>> b.ndim 2 >>> c.size 8 >>> c.ndim 2 >>> d.size 8 >>> d.ndim 2 >>> e.ndim 2 >>>e.size 12
**這裏ndim就是求的是rank,因此會發現matrix的都是2,可是array的就會存在差別,須要計算等。size返回的是元素的個數** - 關於dim, shape, rank, dimension and axis in numpy的細節的問題理解: [stackoverflow地址][2] ## 補充 ## 如何讓
M = matrix([1, 2, 3, [4]])
如何轉變爲
array([1, 2, 3, 4])ip
比較優雅的辦法:
x=matrix(arange(12).reshape((3,4)))
x
matrix([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
x.getA1()
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
「`ci
在運用中,仍是用array好點,array的惟一缺陷就是在表示矩陣的相乘時候,要用dot,而不是*。get
關於numpy裏的array和matrix的其他的操做函數,另見wiki地址:http://wiki.scipy.org/NumPy_for_Matlab_Usersit