web-dev-qa-db-ja.com

NumPy配列を転置する

私はPythonとNumPyを使っていて、 "transpose"に関していくつか問題があります。

import numpy as np
a = np.array([5,4])
print(a)
print(a.T)

a.Tを呼び出しても配列は置き換えられません。 aが例えば[[],[]]の場合、それは正しく転置しますが、私は[...,...,...]の転置が必要です。

151
thaking

想定どおりに機能しています。 1D配列の転置は、まだ1D配列です。 (もしあなたがmatlabに慣れているのであれば、基本的に1D配列の概念はありません。Matlabの "1D"配列は2Dです。)

1Dベクトルを2D配列に変換してから転置したい場合は、np.newaxis(またはNone、それらは同じです。newaxisの方が読みやすくなります)でスライスします。

import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)

しかし一般的に言って、あなたはこれについて心配する必要はありません。あなたがただ習慣をつけずにそれをやっているのであれば、通常余分な次元を追加することはあなたが望むものとは異なります。さまざまな計算をするとき、Numpyは自動的に1D配列をブロードキャストします。通常、ベクトルが欲しいときは、行ベクトルと列ベクトルを区別する必要はありません(どちらもベクトルです。どちらも2次元です)。

201
Joe Kington

1つではなく2つのブラケットペアを使用してください。 1つのブラケットペアを使用した場合に作成した1次元配列とは異なり、これにより2次元配列が作成されます。

import numpy as np    
a = np.array([[5, 4]])
a.T

より徹底的な例:

>>> a = [3,6,9]
>>> b = np.array(a)
>>> b.T
array([3, 6, 9])         #Here it didn't transpose because 'a' is 1 dimensional
>>> b = np.array([a])
>>> b.T
array([[3],              #Here it did transpose because a is 2 dimensional
       [6],
       [9]])

ここで何が起こっているのかを見るには、numpyのshapeメソッドを使用してください。

>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)
114
savagent

1次元配列の場合

a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # <--- THIS IS IT

print a
array([[1],
       [2],
       [3],
       [4]])

-1が「必要なだけの行」を意味することを理解したら、これが配列を「転置」するための最も読みやすい方法であることがわかります。あなたの配列がより高い次元であるならば、単にa.Tを使ってください。

64
Ulf Aslak

追加の角括弧で囲むことで、既存のベクトルを行列に変換できます。

from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix

numpyには matrix クラスもあります( array vs. matrix を参照)...

matrix(v).T ## transpose a vector into a matrix
17
nobar

一次元配列 - >列/行行列

>>> a=np.array([1,2,4])
>>> a[:, None]    # col
array([[1],
       [2],
       [4]])
>>> a[None, :]    # row, or faster `a[None]`
array([[1, 2, 4]])

@ joe-kingtonが言ったように、読みやすくするためにNonenp.newaxisに置き換えることができます。

13
ankostis

1次元配列を2次元列に「転置」するには、 numpy.vstack を使用します。

>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
       [2],
       [3]])

それはまたバニラリストのために働きます:

>>> numpy.vstack([1,2,3])
array([[1],
       [2],
       [3]])
9
Colonel Panic

あなたは2次元配列だけを転置することができます。 numpy.matrixを使って2D配列を作成することができます。これは3年遅れています、しかし私は解決策の可能なセットに追加しています:

import numpy as np
m = np.matrix([2, 3])
m.T
3

の転置

x = [[0 1],
     [2 3]]

です

xT = [[0 2],
      [1 3]]

まあコードは:

x = array([[0, 1],[2, 3]]);
np.transpose(x)        

詳細については、こちらのリンクをクリックしてください。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html

1
Faeze Alahabadi

別の解決策.... :-)

import numpy as np

a = [1,2,4]

[1、2、4]

b = np.array([a]).T

配列([[1]、[2]、[4]])

1
omotto

私は上記の記事を整理統合しています。他の人が時間を節約するのに役立つことを願っています:

下記の配列は(2, )dimensionを持ち、それは1-D配列です、

b_new = np.array([2j, 3j])  

1-D配列を転置する方法は2つあります。


"np.newaxis"またはnoneでスライスしてください!

print(b_new[np.newaxis].T.shape)
print(b_new[None].T.shape)

他の書き方、上記のT操作なし。

print(b_new[:, np.newaxis].shape)
print(b_new[:, None].shape)

[]の折り返しまたはnp.matrixの使用は、新しい次元を追加することを意味します。!

print(np.array([b_new]).T.shape)
print(np.matrix(b_new).T.shape)
1
anu

numpy内の関数の名前は column_stack です。

>>>a=np.array([5,4])
>>>np.column_stack(a)
array([[5, 4]])
0
tmarthal

上記のコメントの一部として、1D配列の転置は1D配列なので、1D配列を転置する1つの方法は、次のように配列を行列に変換することです。

np.transpose(a.reshape(len(a), 1))
0
TheOriginalAlex

代わりにarr [:、None]を使って列ベクトルを作成してください。

0
Mohammed Awney