https://en.wikipedia.org/wiki/Transpose - 転置に関するこの記事は、行列の転置についてのみ述べています。
https://en.wikipedia.org/wiki/Row_and_column_vectors -
列ベクトルまたは列行列は、簡単に行または列を作成することができ
1×mの行列M×1行列 行ベクトルまたは行の行列でありますベクトル(行列):
In [464]: np.array([[1],[2],[3]]) # column vector
Out[464]:
array([[1],
[2],
[3]])
In [465]: _.shape
Out[465]: (3, 1)
In [466]: np.array([[1,2,3]]) # row vector
Out[466]: array([[1, 2, 3]])
In [467]: _.shape
Out[467]: (1, 3)
しかしnumpy
基本構造はarray
であり、nがベクトルまたは行列です。
[コンピュータサイエンスの配列] - 一般的に、実行時に計算されたインデックスによって選択可能なデータアイテムのコレクション
はnumpy
アレイは0以上の寸法を有することができます。これとは対照的に、MATLABの行列は2次元以上です。もともとMATLABが持っていたのは2次元マトリクスでした。
転置について意味のある話をするには、少なくとも2つの次元が必要です。 1つはサイズ1を持ち、1dベクトルにマップできますが、それでも行列、2次元オブジェクトです。
したがって、reshape
または[:,None]
で行われるかどうかにかかわらず、次元を1次元配列に追加することはハックではありません。これは、有効で正常なnumpy操作に最適です。
基本的な放送規則は次のとおり
、両方のステップが適用されます。この(5)=>(1,5)=>(3,5)
In [458]: np.broadcast_to(np.arange(5), (3,5))
Out[458]:
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
を、我々は明示的にサイズを追加する必要があります右側(端)に一次元:
In [459]: np.broadcast_to(np.arange(5)[:,None], (5,3))
Out[459]:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]])
np.broadcast_arrays(np.arange(5)[:,None], np.arange(3))
は、2つ(5,3)のアレイを生成します。
np.broadcast_arrays(np.arange(5), np.arange(3)[:,None])
は(3,5)を作る。
には、(5,3)または(3,5)などが必要かどうかを判断できないため、エラーが発生します。
numpyのは、行列指向ではありません。あなたが望むなら、それをテンソル指向と考えることができます。 1D配列には、転置のためにスワップする2つの次元がありません。 – user2357112