0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ndarray空配列をあらかじめ用意してfor文で順番に値を入れていく方法

Posted at

やりたいこと

はじめに空の配列を宣言しておいて、for文を使って順番に値を入れていきたいときがある。

リストの場合

l = []
for i in range(10):
    l.append(i) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

リストの場合はこのように書けば良いが、numpyではどう書けばいいか?
ググってもあんまり出てこなかったのでメモとして情報を残しておく。

numpyの場合

array = np.empty(0) 
for i in range(10):
    array = np.append(array, i)
    #array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

実行速度比較

range(10000)で実行速度を比較してみた。

list
%%timeit
l = []
for i in range(10000):
    l.append(i)

#532 µs ± 16.2 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
numpy
%%timeit
array = np.empty(0)
for i in range(10000):
    array = np.append(array, i)

#57.8 ms ± 2.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

空配列に順番に値を入れていくのであれば、listのほうが約100倍高速である。listで配列を追加していって、最後にndarrayに変換する場合は、

%%timeit
l = []
for i in range(10000):
    l.append(i)
l_np = np.array(l)

#1.17 ms ± 29.7 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)

予め配列のサイズが分かっているのであれば、np.zeros()を使用してはじめに要素を持ったndarrayを用意するほうが高速に動作する。

%%timeit
array = np.zeros(10000)
for i in range(10000):
    array[i] = i

#978 µs ± 31 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?