私はPythonとNumPyを使用していますが、"transpose"でいくつかの問題があります。
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
a.Tを呼び出すことは、配列を転置しません。 a
が例えば [[],[]]
であれば正しく転置されますが、私は [...,...,...]
の転置を必要としています。
想定通りに動作しています。1次元の配列の転置は、やはり1次元の配列です。 (matlabに慣れている方ならわかると思いますが、matlabには基本的に1次元配列の概念がありません。Matlabの"1D"配列は2Dです)。
1次元のベクトルを2次元の配列にして転置したい場合は、np.newaxis
(またはNone
)でスライスすればよいのです(両者は同じですが、newaxis
の方が読みやすいだけです)。
import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)
しかし、一般的にはこのことを気にする必要はありません。ただ習慣的にやっているだけなら、余計な次元を追加することはたいていの場合必要ありません。 Numpyは様々な計算をする際に、自動的に1次元の配列をブロードキャストします。ベクトルが欲しいだけなら、行ベクトルと列ベクトル(どちらもベクトルではありません。 どちらも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)
既存のベクトルを角括弧で囲んで行列に変換することができます...
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