2010-07-26 142 views
104

我正在使用numpy。我有一個有1列和N行的矩陣,我想用N個元素得到一個數組。Numpy matrix to array

例如,如果我有M = matrix([[1], [2], [3], [4]]),我想獲得A = array([1,2,3,4])。我想用A = np.array(M.T)[0]來實現它。有沒有人知道更優雅的方式來獲得相同的結果?

謝謝!

+0

Ivnerse問題:[將2D陣列numpy的爲2D numpy的矩陣(http://stackoverflow.com/questions/17443620/convert-a-2d -numpy-array-to-a-2d-numpy-matrix) – 2013-07-03 08:56:54

回答

125

如果您想一些更可讀的,你可以這樣做:等價

A = np.squeeze(np.asarray(M)) 

,你也可以這樣做:A = np.asarray(M).reshape(-1),但是這是一個有點不太容易閱讀。

+4

對我而言,小小的爭吵......爲什麼numpy將數組和矩陣作爲單獨的實體。它是如此unpythonic恕我直言。感謝這個提示@Joe。 – Naijaba 2015-02-13 06:37:47

+5

@Naijaba - 值得的是,矩陣類有效(但不是正式)貶值。它主要是爲了歷史目的。刪除'numpy.matrix'是一個有爭議的問題,但是numpy的開發者非常同意你的觀點,即由於一系列的原因,兩者都是不合理的和煩人的。但是,使用「矩陣」的舊版「無法維護」的代碼很難完全刪除它。 – 2015-02-13 14:03:15

+1

更何況,真正的矩陣乘法僅在Numpy 1.10中添加了數組,並且基本上仍處於測試階段。這意味着很多人(包括我自己)仍然需要使用矩陣而不是陣列來完成我們想要完成的任務。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html – 2016-12-31 02:35:45

5

或者你可以儘量避免與

A = M.view(np.ndarray) 
A.shape = -1 
10
A, = np.array(M.T) 

一些臨時工取決於你的優雅我想的意思,但多數民衆贊成我會做

4

你可以嘗試以下的變體:

result=np.array(M).flatten() 
5
np.array(M).ravel() 

如果你關心速度;但是,如果你關心內存:

np.asarray(M).ravel() 
1

首先,Mv = numpy.asarray(M.T),它給你一個4X1但二維數組。

然後,執行A = Mv[0,:],它給你你想要的。你可以把它們放在一起,如numpy.asarray(M.T)[0,:]

0

這將基質轉換成陣列

A = np.ravel(M).T