7

ニューラルネットを純粋な python から numpy に書き直しましたが、動作がさらに遅くなりました。だから私はこの2つの機能を試しました:

def d():
    a = [1,2,3,4,5]
    b = [10,20,30,40,50]
    c = [i*j for i,j in zip(a,b)]
    return c

def e():
    a = np.array([1,2,3,4,5])
    b = np.array([10,20,30,40,50])
    c = a*b
    return c

timeit d = 1.77135205057

timeit e = 17.2464673758

Numpy は 10 倍遅いです。なぜそうなのか、numpyを適切に使用する方法は?

4

4 に答える 4

14

eでリストと配列を構築しているのに対し、 でリストのみを構築しているため、不一致が発生していると思いますd。検討:

import numpy as np

def d():
    a = [1,2,3,4,5]
    b = [10,20,30,40,50]
    c = [i*j for i,j in zip(a,b)]
    return c

def e():
    a = np.array([1,2,3,4,5])
    b = np.array([10,20,30,40,50])
    c = a*b
    return c

#Warning:  Functions with mutable default arguments are below.
# This code is only for testing and would be bad practice in production!
def f(a=[1,2,3,4,5],b=[10,20,30,40,50]):
    c = [i*j for i,j in zip(a,b)]
    return c

def g(a=np.array([1,2,3,4,5]),b=np.array([10,20,30,40,50])):
    c = a*b
    return c


import timeit
print timeit.timeit('d()','from __main__ import d')
print timeit.timeit('e()','from __main__ import e')
print timeit.timeit('f()','from __main__ import f')
print timeit.timeit('g()','from __main__ import g')

ここで、関数fgは毎回リスト/配列を再作成することを回避し、非常に似たパフォーマンスを得ます:

1.53083586693
15.8963699341
1.33564996719
1.69556999207

list-comp +zipが依然として勝つことに注意してください。ただし、配列を十分に大きくすると、numpy が圧倒的に有利になります。

t1 = [1,2,3,4,5] * 100
t2 = [10,20,30,40,50] * 100
t3 = np.array(t1)
t4 = np.array(t2)
print timeit.timeit('f(t1,t2)','from __main__ import f,t1,t2',number=10000)
print timeit.timeit('g(t3,t4)','from __main__ import g,t3,t4',number=10000)

私の結果は次のとおりです。

0.602419137955
0.0263929367065
于 2013-05-16T20:43:01.217 に答える
3
import time , numpy
def d():
    a = range(100000)
    b =range(0,1000000,10)
    c = [i*j for i,j in zip(a,b)]
    return c

def e():
    a = numpy.array(range(100000))
    b =numpy.array(range(0,1000000,10))
    c = a*b
    return c



#python ['0.04s', '0.04s', '0.04s']
#numpy ['0.02s', '0.02s', '0.02s']

より大きな配列で試してください...配列を作成するオーバーヘッドがあっても、numpyははるかに高速です

于 2013-05-16T20:48:57.340 に答える