私はnumpyベクトル(1-D配列)またはスカラー(すなわち、単に数字)のリストを持っています。すべてのベクトルは同じ長さですが、私はそれが何であるか分かりません。私はvstack
スカラーが各位置にスカラーを持つベクトルとして扱われるように1つの行列(2-D配列)を作成するためのすべての要素にする必要があります。配列とスカラーをnumpyで積み重ねる方法は?
ケース1:
>>> np.vstack([np.array([1, 2, 3]), np.array([3, 2, 1])])
array([[1, 2, 3],
[3, 2, 1]])
ケース2:
>>> np.vstack([1, 2])
array([[1],
[2]])
ケース3:
>>> np.vstack([np.array([1, 2, 3]), 0, np.array([3, 2, 1])])
np.array([[1, 2, 3],
[0, 0, 0],
[3, 2, 1]])
ケース1と2の作業アウト
例は、最高の説明です-of-the-box。しかし、ケース3では、vstackがすべての要素を同じ長さの配列にする必要がないため、
これを実現する良い方法がありますか?
はい、それは私が探しているものです。ちょっとした質問(ちょっと好奇心から):最初のケース( '' broadcast'')では、なぜ '' column_stack''が要素を列の代わりに列に入れたのですか?スカラがなく、 '' broadcast''を省略すると、ベクトルは行ではなく列になります。それは結果を転置する "放送"のようなものです。 – zegkljan
@zegkljan: 'np.broadcast'はイテレータを返します。そのイテレータは、元の配列(またはスカラー)のそれぞれからの 値からなるタプルを返します。これらの値は、要素ごとの操作のためにまとめて です。 'list(np.broadcast(np.arange(24).reshape(2,3,4)、np.arange(3 * 4).reshape(3,4)))'が返すものを見てください。 2タプルの24要素リストです。 'np.broadcast_arrays'のようにブロードキャストされた個々の配列は表示されません。それは要素ごとのペアリングを示しています。 'np.broadcast'によって返されるイテレータの性質を考えると、所望の配列を形成するためには' np.column_stack'が必要です。 – unutbu
'np.array(list(np.broadcast(....))'は 'np.vstack(np.broadcast(...))'より高速です。 .atleast_2d'。 – hpaulj