NumPy でベクトルを 1d または 2d ndarrays として表すための標準的な方法はありますか? ベクトルを 2 次元配列として表す MATLAB から移行しています。
2 に答える
私の経験では、ベクトルの numpy では 1D が標準です。n
要素のベクトルを形状の 2D 配列として保持する唯一の正当(1, n)
な理由(n, 1)
は、行ベクトルと列ベクトルを区別したい線形代数のコンテキストにあります。EitanT が彼の削除された答えをほのめかしたように、おそらく numpy の型を使用することをお勧めします。これ は、matrix
単一要素アクセスを除いて戻り値の 2D 形状を保持a
し(m, n)
ます。両方の場合において。a[0]
(n,)
ndarray
(1, n)
matrix
a[0, 0]
shape の 1D ベクトルに固執する場合(n,)
、2D 形状を必要とする特定の操作のためにオンザフライで形状を変更できます。
a.reshape(-1, 1) # shape (n, 1)
a[:, None] # shape (n, 1)
a.reshape(1, -1) # shape (1, n)
a[None, :] # shape (1, n)
Numpy は、2D 配列が関与する操作のためにブロードキャスト(1, n)
するときに、1D ベクトルを自動的に形状を変更します。
matlab では (歴史的な理由から私は主張します)、基本型は配列 (行列) によるものであるため、スカラーは 1 行 1 列の配列であり、ベクトルは 1M
行1 列または 1 行 1 列の配列です。(メモリ レイアウトは常に Fortran スタイルです)。N
N
N
この「制限」は には存在しませんnumpy
。真のスカラーがあり、ndarray
は好きなだけ次元を持つことができます。(メモリ レイアウトは、C または Fortran-contigous にすることができます。) このため、推奨される (標準の) プラクティスはありません。アプリケーションに応じて、ニーズにより適したものを選択するのはあなた次第です。