私はnumpyで大きな3次元配列を持っています(サイズは100x100x100と言うことができます)。私は何度も何度も(要素の約70%)その部分を反復したいと思います。そして、同じサイズのブール値行列を持ち、その要素が操作を行うかどうかを定義します。numpy配列の一部で繰り返し処理を高速化するには
私の現在の方法は、形状の配列「COORDS」(N、3)の操作を行うには、その後
for i in np.arange(many_iterations):
for j in coords:
large_array[j] = do_something(large_array[tuple(j)])
が、それは実際には良いだろうれているすべてのCOORDSが含まれて作成する最初にありますブール配列をテストするために、ループ全体に評価を加え、ループ内に余分な演算を含めることができます(真理の評価は、1回ではなく複数回実行されることに注意してください)。私の考えは、この場合の賃金オフは、この最後の行は、このケースで動作させることでしょうどのようにループ
large_array = do_something(large_array if condition True)
ために退治されるだろうということでしたか?
'do_something 'が何であるかに応じて、' large_array [boolean_array] = do_something(large_array [boolean_array]) 'やもっと短いものができるかもしれません。 –
あなたの感想は正しいと思います。配列全体の操作を行い、 'numpy.where'のようなものを使用するとあなたの利益になるかもしれません。 –