2017-06-26 6 views
0

Pythonでforを使用して配列を生成しています。現在、配列内のすべての要素を繰り返し処理し、各インデックスに対して、別の配列から関連する情報を取得してから操作を実行します。Pythonでのバッチ代数演算

これは、現在のコード

for idx, vertex_color in enumerate(self.vertex_colors): 
    coefficients = self.cubic_coefficients[idx*3:(idx*3)+3] 

    # Applies cubic regression to obtain regressed mean amplitude 
    c[idx] = coefficients[0] * current_beta**2 + coefficients[1] * current_beta + coefficients[2] 

あるしかし、私のベクトルself.vertex_colorsは、非常に大きいので、このループのための私のボトルネックです。これらの操作を1つのコマンドで並列化または実行する方法はありますか?ある意味では、bsxfunはMATLABでは何をしたいのですが、任意の関数に対して行います。

+1

あなたは 'np.array'を使ってみましたか?彼らはネイティブリストよりはるかに効率的です – dabadaba

答えて

1

具体的には、coefficientsnumpy.arrayの場合は、このようなループなしで実行できます。

import numpy 

coefficients = numpy.array([1, 2, 3, 1, 2, 3]) 
current_beta = 1 
c = (coefficients[0::3] * current_beta**2 
    + coefficients[1::3] * current_beta 
    + coefficients[2::3]) 

これは任意の係数の長さで機能します。ここでスライスするために使用される構文は、基本的にポイントから始まり、3番目の要素ごとに取ります。

+0

偉大な、私は必要なもの!私はそれがループなしで行うことができることを知っていましたが、構文を正しく取得できませんでした! – Dan