2012-08-09 14 views
14

私はPython scipyモジュールで転置方法の非常に基本的な例を試していますが、予期しない結果が得られていません。私はピラブモードでIpythonを使用しています。Numpy transposeが期待した結果を出さない

a = array([1,2,3] 
print a.shape 
>> (3,) 
b = a.transpose() 
print b.shape 
>> (3,) 

「a」と「b」の配列の内容を印刷すると、それらは似ています。

期待がある:(MatlabのOM転置をもたらすされる)

[1, 
    2, 
    3] 
+0

同様に "どんな番号を記入し、この作品が作る":http://stackoverflow.com/questions/5954603/python-numpy-transpose – nobar

答えて

17

NumPyのtranspose()は、効果的に配列の形状を反転させます。配列が1次元の場合、これは効果がないことを意味します。 numpyので

、アレイ

array([1, 2, 3]) 

array([1, 
     2, 
     3]) 

は実際には同じである - それらは空白のみが異なります。おそらく、対応する2次元配列はtranspose()でうまくいくでしょう。

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]]) 

注ほとんどのアプリケーションでは、プレーンな1次元配列は、行または列ベクトルの両方として正常に動作しますが、MATLABから来たとき、あなたはnumpy.matrixを使用して好むかもしれないことを:またnumpyののmatrixタイプを使用することを検討してください。

+4

'」doesnのmatrix'は'array'とまったく同じように動作します。それは混乱を招く。コードを切断して 'array'で始める方がよいかもしれません。 – jfs

+1

@ J.F.Sebastian:この動作がMatlabのユーザーに慣れているので、動作が異なっているという事実は私が言及した理由です。私はめったに 'matrix'クラスを使用しませんが、時には便利です。 –

+0

最近、フィーチャーとサンプルの数を決めるために、入力上で.shapeを呼び出す関数( 'sklearn'から)を使用しなければなりませんでした。私のデータでは、私が望むことをするためには、(1,5)ではなく、shape(5,1)の入力配列が明示的に必要でした。この場合、配列を使ってこれを処理する方法がない限り、 'matrix'が動作し、' array'はできません。 – user2428107

5

あなたが試してみてください:a = array([[1,2,3]])又はa = array([[1],[2],[3]])、すなわち、aがマトリックス(行ベクトル、列ベクトル)であるべきです。

23

転置は、1次元配列のための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]]) 
+0

最初に軸を追加してトランスポーズするのではなく、通常、新しい軸を最後に追加することをお勧めします。 'a [:、None] 'は、一歩で目的の結果を得られます。 –

+0

@SvenMarnach:答えを – jfs

+0

に更新しました。高次元のために一般化するために、@SvenMarnachのアイデアを使って 'a [...、None]'を実行できます。 http://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html#structural-indexing-tools – astrojuanlu

5

1Dアレイを2Dアレイに再構成するためのより簡潔な方法は、

です。
a = np.array([1,2,3]), a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1)) 

-1形状ベクトルに意味

関連する問題