我想在Python scipy模塊轉置方法的一個非常基本的例子,但沒有給予預期的結果。我用python模式使用Ipython。Numpy轉置不給予預期的結果
a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)
如果我打印數組「a」和「b」的內容,它們是相似的。
期望是:(這將導致在Matlab OM轉)
[1,
2,
3]
我想在Python scipy模塊轉置方法的一個非常基本的例子,但沒有給予預期的結果。我用python模式使用Ipython。Numpy轉置不給予預期的結果
a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)
如果我打印數組「a」和「b」的內容,它們是相似的。
期望是:(這將導致在Matlab OM轉)
[1,
2,
3]
NumPy的transpose()
有效地反轉了一個數組的形狀。如果數組是一維的,這意味着它沒有效果。
在NumPy的,陣列
array([1, 2, 3])
和
array([1,
2,
3])
實際上是相同的 - 它們只在空白不同。你可能需要的是相應的二維數組,其中transpose()
可以正常工作。也可以考慮使用與NumPy的matrix
類型:
In [1]: numpy.matrix([1, 2, 3])
Out[1]: matrix([[1, 2, 3]])
In [2]: numpy.matrix([1, 2, 3]).T
Out[2]:
matrix([[1],
[2],
[3]])
注意,對於大多數應用來說,普通的一維數組將正常工作既是一個行或列向量,但是從MATLAB來的時候,你可能更喜歡使用numpy.matrix
。
'matrix'沒有按」 t的行爲完全像'array'。它造成混亂。切斷電源並從'array'開始可能會更好。 – jfs 2012-08-09 15:04:43
@ J.F.Sebastian:它的行爲不同的事實正是我提到它的原因,因爲這種行爲更接近Matlab用戶習慣的。我很少使用矩陣類,但我發現它有時候很方便。 – 2012-08-09 15:39:28
最近,我不得不使用一個函數(來自'sklearn'),它在其輸入上調用.shape來決定特徵和樣本的數量。所以對於我的數據,它明確需要一個形狀(5,1)的輸入數組而不是(1,5),以便做我想要的。在這種情況下,「矩陣」將起作用,而「陣列」不會 - 除非有辦法用數組來處理這個問題。 – user2428107 2015-10-08 06:29:52
你應該嘗試:a = array([[1,2,3]])
或a = array([[1],[2],[3]])
,就是a
應該是一個矩陣(行向量,列向量)。
Transpose是一維數組的一個noop。
添加新中軸線和轉:
>>> a[None].T
array([[1],
[2],
[3]])
>>> np.newaxis is None
True
或整形:
>>> a.reshape(a.shape+(1,))
array([[1],
[2],
[3]])
或者像@Sven Marnach的意見建議,在末尾添加新中軸線:
>>> a[:,None]
array([[1],
[2],
[3]])
除了在開始和移位時添加一個軸,我通常更喜歡在最後添加新的軸:'a [:,None]'將在一個步驟中給出所需的結果。 – 2012-08-09 14:39:31
@SvenMarnach:我已經更新了答案 – jfs 2012-08-09 14:41:44
爲了推廣更高維度,使用@SvenMarnach的思想,你可以做'a [...,None]'。 http://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html#structural-indexing-tools – astrojuanlu 2015-12-21 06:48:58
將一維陣列重塑爲二維陣列的更簡潔的方式是:
a = np.array([1,2,3]), a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))
-1的形狀矢量意味着「填寫任何數字,使這項工作」
類似:http://stackoverflow.com/questions/5954603/python-numpy-transpose – nobar 2013-02-13 06:36:02