LoginSignup
6
5

More than 3 years have passed since last update.

Cython内でのlistとvectorの比較

Last updated at Posted at 2019-09-16

CythonからC++のvectorを呼んでみる。

この方法はいろんな記事に書かれているが、これにより(Cythonでのlistと比べて)どれくらい速くなるのか気になったので、メモを残しておく(コーディング時にどっちを使うか迷うと思うので)。

%%cython -a
# distutils: language=c++
from libcpp.vector cimport vector

def lis():
    cdef:
        int i
        long sum = 0
        list l = []
    for i in range(1000000):
        l.append(i*2)
    for i in range(1000000):
        sum += l[i]        
    print(sum)

def vec():
    cdef:
        int i
        long sum = 0
        vector[int] l = []
    for i in range(1000000):
        l.push_back(i*2) # vectorではpush_backを用いる
    for i in range(1000000):
        sum += l[i]
    print(sum)

と定義して、%timeit lis()などとして比較した。

結果

lis() 10 loops, best of 3: 94.5 ms per loop
vec() 100 loops, best of 3: 4.44 ms per loop

差は歴然だ。C++のvectorのほうがずっと速い!
(-O3 コンパイルのおかげでforの順番とかが最適化されてるのかもしれないが、そういうことができるのもC++ネイティブに書き換えられてるおかげなので、そういうところを含めて速くなっていると主張したい)

6
5
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
6
5