形状の行ベクトル(1、256)があるとします。代わりに、形状(256、1)の列ベクトルに変換します。 Numpyではどうしますか?
これを行うには、transpose操作を使用できます。
例:
In [2]: a = np.array([[1,2], [3,4], [5,6]])
In [5]: np.shape(a)
Out[5]: (3, 2)
In [6]: a_trans = a.transpose()
In [8]: np.shape(a_trans)
Out[8]: (2, 3)
In [7]: a_trans
Out[7]:
array([[1, 3, 5],
[2, 4, 6]])
元の配列a
は変更されないままであることに注意してください。転置操作は、コピーを作成して転置するだけです。
単にnumpyの形状変更機能を使用できます。
a=np.array([[1,2,3,4]])
a:
array([[1, 2, 3, 4]])
a.shape
(1,4)
b=a.reshape(-1,1)
b:
array([[1],
[2],
[3],
[4]])
b.shape
(4,1)
これは本当に良い質問です。
これを行うためにコンパイルした方法のいくつかは次のとおりです。
>> import numpy as np
>> a = np.array([1, 2, 3], [2, 4, 5])
>> a
>> array([[1, 2],
[2, 4],
[3, 5]])
別の方法:
>> a.T
>> array([[1, 2],
[2, 4],
[3, 5]])
これを行う別の方法は次のとおりです。
>> a.reshape(a.shape[1], a.shape[0])
>> array([[1, 2],
[3, 2],
[4, 5]])
これらすべての問題で2次元配列を使用しましたが、実際に問題になるのは、エレガントに列化したい1次元の行ベクトルがある場合です。
Numpyのリシェイプには、目的のディメンション(行数または列数)の1つを渡す機能があります。他のディメンションを-1
として渡すと、numpyは他のディメンションを単独で把握できます
>> a.reshape(-1, 1)
>> array([[1],
[2],
[3],
[2],
[4],
[5]])
>> a = np.array([1, 2, 3])
>> a.reshape(-1, 1)
>> array([[1],
[2],
[3]])
>> a.reshape(2, -1)
>> ValueError: cannot reshape array of size 3 into shape (2,newaxis)
したがって、(m * n) / your_choice
が整数である限り、他の次元を気にせずに1次元を選択できます。
この-1
についてもっと知りたい場合: numpyの変形で-1はどういう意味ですか?
注:これらの操作はすべて新しい配列を返し、元の配列を変更しません。
行ベクトルを列ベクトル in Pythonに変換することが重要になる場合があります。たとえば、broadcastingを使用する場合:
_import numpy as np
def colvec(rowvec):
v = np.asarray(rowvec)
return v.reshape(v.size,1)
colvec([1,2,3]) * [[1,2,3], [4,5,6], [7,8,9]]
_
最初の行に1を、2番目の行に2を、3番目の行に3を掛けます。
_array([[ 1, 2, 3],
[ 8, 10, 12],
[ 21, 24, 27]])
_
対照的に、行列として型指定された列ベクトルを使用しようとすると:
_np.asmatrix([1, 2, 3]).transpose() * [[1,2,3], [4,5,6], [7,8,9]]
_
エラーValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)
で失敗します。