Help us understand the problem. What is going on with this article?

速度:Pythonの配列の末尾に要素追加

More than 3 years have passed since last update.

1. はじめに

 Pythonの配列の末尾に要素を追加する方法は,いくつかあり,list型やnumpyのndarray型のどちらを使うかで方法は異なる.
 これらの方法で,実行速度にどれだけ違いがでるのか疑問に思ったので,かるーくだが調べてみたら,list型に対するappendの比較のみ見つかった(リサーチ不足だったらごめんなさい).
 そこで,次節に示す3つの配列に対する要素追加の方法の実行速度を簡単な実験で調べてみる.要素を追加する回数は,10万回とし,時間計測には,timeモジュールを使用した.実験に使用したコードは,いちばん最後にのせておく.

2. 配列に対する要素追加の方法

2.1 list型に対する方法

list.appendを使用する方法.
これは,Pythonに標準で組み込まれる方法で,Pythonの初心者でもよく使う方法のはず.

x = []
for i in range( 10 ):
    x.append( i )

2.2 ndarrayに対する方法1

numpy.appendを使用する方法.

import numpy as np
x = np.array( [] )
for i in range( 10 ):
    x = np.append( x, i )

2.3 ndarrayに対する方法2

numpy.hstackを使用する方法.

import numpy as np
x = np.array( [] )
for i in range( 10 ):
    x = np.hstack( (x,i) )

3 結果

実行時間(秒)
list.append 0.0149400234222
numpy.append 4.47969698906
numpy.hstack 4.75327301025

若干予想はしていたが,list.appendが圧倒的に早い.
そして,numpy.appendとnumpy.hstackは速度差が出ていない.
やはり,予め必要な配列の大きさが分かっているのなら,ndarrayを,そうでなければlistを使うというのが正解でよいみたい.

4 実験に使用したコード

import numpy as np

def stdAppend(n):
    x = []
    for i in range(n):
        x.append(i)
    return

def npAppend(n):
    x = np.array( [] )
    for i in range(n):
        x = np.append(x,i)
    return

def npHstack(n):
    x = np.array( [] )
    for i in range(n):
        x = np.hstack( (x,i) )
    return

if __name__ == '__main__':
    import time

    n = 100000

    start = time.time()
    stdAppend(n)
    ttime = time.time() - start
    print( "stdAppend: %s" % ttime )

    start = time.time()
    npAppend(n)
    ttime = time.time() - start
    print( "npAppend : %s" % ttime )

    start = time.time()
    npHstack(n)
    ttime = time.time() - start
    print( "npHstack : %s" % ttime )
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away