私はPythonとNumPyを使っていて、 "transpose"に関していくつか問題があります。
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
a.T
を呼び出しても配列は置き換えられません。 a
が例えば[[],[]]
の場合、それは正しく転置しますが、私は[...,...,...]
の転置が必要です。
想定どおりに機能しています。 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次元です)。
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)
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
を使ってください。
追加の角括弧で囲むことで、既存のベクトルを行列に変換できます。
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
一次元配列 - >列/行行列
>>> 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が言ったように、読みやすくするためにNone
をnp.newaxis
に置き換えることができます。
1次元配列を2次元列に「転置」するには、 numpy.vstack
を使用します。
>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
[2],
[3]])
それはまたバニラリストのために働きます:
>>> numpy.vstack([1,2,3])
array([[1],
[2],
[3]])
あなたは2次元配列だけを転置することができます。 numpy.matrix
を使って2D配列を作成することができます。これは3年遅れています、しかし私は解決策の可能なセットに追加しています:
import numpy as np
m = np.matrix([2, 3])
m.T
の転置
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
別の解決策.... :-)
import numpy as np
a = [1,2,4]
[1、2、4]
b = np.array([a]).T
配列([[1]、[2]、[4]])
私は上記の記事を整理統合しています。他の人が時間を節約するのに役立つことを願っています:
下記の配列は(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)
numpy
内の関数の名前は column_stack です。
>>>a=np.array([5,4])
>>>np.column_stack(a)
array([[5, 4]])
上記のコメントの一部として、1D配列の転置は1D配列なので、1D配列を転置する1つの方法は、次のように配列を行列に変換することです。
np.transpose(a.reshape(len(a), 1))
代わりにarr [:、None]を使って列ベクトルを作成してください。