web-dev-qa-db-ja.com

Numpyで行ベクトルを列ベクトルに変換する

形状の行ベクトル(1、256)があるとします。代わりに、形状(256、1)の列ベクトルに変換します。 Numpyではどうしますか?

7
MY_G

これを行うには、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は変更されないままであることに注意してください。転置操作は、コピーを作成して転置するだけです。

4
kmario23

単に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)
7
Mahdi Ghelichi

これは本当に良い質問です。

これを行うためにコンパイルした方法のいくつかは次のとおりです。

>> 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はどういう意味ですか?

注:これらの操作はすべて新しい配列を返し、元の配列を変更しません。

2
DuttaA

行ベクトルを列ベクトル 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)で失敗します。

0
Markus Strauss