2011-12-17 10 views
0
>>> from pandac.PandaModules import Vec3 
>>> import numpy 
>>> l = [] 
>>> l.append(Vec3(1,1,1)) 
>>> l.append(Vec3(1,1,1)) 
>>> l.append(Vec3(1,1,1)) 
>>> Vec3(1,1,1)+Vec3(1,1,1) 
Vec3(2, 2, 2) 
>>> sum(l) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'int' and 'libpanda.Vec3' 
>>> numpy.sum(l) 
9.0 
>>> 

私は(高速==ない純粋なのpythonが、numpyの速度でループのために)いくつかの高速たいachiveする方法:numpyの:ポイント合計

>>> my_smart_sum(l) 
Vec3(3,3,3) 
+0

私はこの方法を見つけました:reduce(lambda x、y:x + y、l)some downside? – nkint

+1

欠点があり、最もよく説明されています[こちら](http://stackoverflow.com/questions/1892324/why-program-functionally-in-python/1892614#1892614)。 –

答えて

2

はこれを試してみてください:

sum(l, start=Vec3(0,0,0)) 

か、numpyで、これは:

numpy.sum(l, axis=0) 

速度は実装によって異なりますベクトル加算。どちらの方法が最速かを判断するには、timeitを使用する必要があります。これは次のようになります。

python -m timeit "import numpy; foo = [[1,1,1],[1,1,1]]" "numpy.sum(foo, axis=0)" 
10000 loops, best of 3: 46.5 usec per loop 

最初に渡す文字列はsetup-statementです。これはタイミングに含まれません。 2番目の文字列は、実際に時間をかけたいコードです。私はpandacについて何も知らないが、Cythonを使用して数回の処理を高速に行うことができます。

+0

スタートとトライしてください。私はVec3の戻り値が必要なので、numpy.sumはnumpyの配列を返します。 pandacはC++で書かれたレンダリングエンジンで、Pythonでラップされているので、大丈夫だと思います。 – nkint

+0

reduceを使用していますか? – nkint

関連する問題