2015-10-27 236 views
0

我讀了一些關於NumPy的內容,它是Matrix類。作者在文檔中寫道,我們只能創建一個2維矩陣。所以我認爲他們的意思是你只能寫這樣的東西:Numpy中的多維矩陣

input = numpy.matrix(((1,2), (3,4)) 

這是對的嗎? 但是,當我寫這樣的代碼:

input = numpy.matrix(((1,2), (3,4), (4,5))) 

它也可以... 通常我會說好,爲什麼不呢,我不intrrested爲什麼它的工作原理。但是我必須爲我的大學寫一篇考試,所以我必須知道我是否理解了正確的內容,或者對於2D矩陣來說他們的意思是什麼?

感謝您的幫助

回答

4

它們都是二維矩陣。第一個是2x2二維矩陣,第二個是3x2二維矩陣。它與編程中的二維數組非常相似。例如,第二個矩陣定義爲C中的int matrix[3][2]

然後,3D矩陣表示它具有以下定義:int 3d_array[3][2][3]

在numpy的,如果我嘗試這個具有3D矩陣:

>>> input = numpy.matrix((((2, 3), (4, 5)), ((6, 7), (8, 9)))) 
ValueError: matrix must be 2-dimensional 
+0

+1,你需要記住,numpy的的'matrix'類應該用於「實際矩陣」:二維數組是乘用矩陣乘法,相較於「正規軍」用於任何維度的數組,並使用基於元素的廣播進行乘法。經驗法則:如果你不需要使用'*'進行矩陣乘法,可以使用'ndarray'('ndarray'可以使用'np.dot') – Jiby

0

埃姆雷。的答案是正確的,但我仍想解決使用numpy矩陣的問題,這可能是您混淆的根源。


當有關使用numpy.matrix疑問,去ndarray小號

  • Matrix實際上是一個ndarray子類:一切矩陣可以做,ndarray可以做到這一點(反向是不完全正確)。
  • 矩陣覆蓋***運營商,和一個Matrixndarray之間的任何操作將返回一個matrix,這對於一些算法有問題的。

更多關於this SO postndarray VS matrix辯論,並specifically this short answer


Numpy documentation

matrix對象從ndarray繼承,因此,它們具有相同的屬性和方法ndarrays。有矩陣對象六個重要的差別,但是,這可能導致意想不到的結果,當您使用的矩陣,但希望他們能像數組:

  • Matrix對象可以使用字符串表示法,讓Matlab的樣式創建語法,其中空格分隔列和分號(';')分隔行。

  • 矩陣對象始終是二維的。這具有深遠的影響,因爲m.ravel()仍然是二維的(在第一維中具有1),並且項選擇返回二維對象,因此序列行爲與數組基本上不同。

  • 矩陣對象乘法乘法是矩陣乘法。確保你理解這個函數,你可能想要接收矩陣。特別是鑑於當m是矩陣時,asanyarray(m)返回矩陣的事實。

  • 矩陣物體覆蓋權力矩陣提高到權力。關於在使用asanyarray(...)獲取數組對象的函數內部使用電源的警告同樣適用於此事實。

  • 矩陣對象的默認__array_priority__是10.0,因此與ndarrays的混合操作總是產生矩陣。

  • 矩陣具有使計算更容易的特殊屬性。 [...]