1. ホーム
  2. python

[解決済み] NumPyで空の配列/行列を作成する方法は?

2022-03-23 03:49:43

質問

配列や行列を、通常のリストと同じように使う方法がわかりません。空の配列(または行列)を作成し、そこに一度に1列(または1行)を追加したいのですが、どうすればよいのでしょうか?

今のところ、このような方法しか見当たりません。

mat = None
for col in columns:
    if mat is None:
        mat = col
    else:
        mat = hstack((mat, col))

一方、リストだったら、こんな風にします。

list = []
for item in data:
    list.append(item)

にそのような記法を使う方法はあるのでしょうか? ナムパイ 配列や行列を作成できますか?

解き方は?

NumPyを効率的に使用するためのメンタルモデルが間違っているのです。NumPyの配列は、連続したメモリブロックに格納されています。既存の配列に行や列を追加したい場合、配列全体を新しいメモリブロックにコピーする必要があり、新しい要素を格納するためのギャップが生じます。これは、配列を構築するために繰り返し行われる場合、非常に非効率的です。

行を追加する場合は、最終的なデータセットと同じ大きさの配列を作成し、そこに行ごとにデータを割り当てるのが最善の方法です。

>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])