5

numpy に大きな 3 次元配列があります (サイズ 100x100x100 としましょう)。その一部 (要素の約 70%) を何度も繰り返し処理したいのですが、同じサイズのブール値行列があり、要素が操作を実行する必要があるかどうかを定義します。

私の現在の方法は、最初に、操作を行うすべての座標を含む形状 (N,3) の配列「座標」を作成し、次に

for i in np.arange(many_iterations):
    for j in coords:
        large_array[j] = do_something(large_array[tuple(j)])

実際には、配列全体を評価し、ブール配列をテストするためにループに追加の操作を含める方が良いでしょうか (真理値の評価は、1 回ではなく many_iterations 回行われることに注意してください)。私の考えでは、この場合の見返りは for ループを取り除くことです

large_array = do_something(large_array if condition True)

この場合、この最後の行はどのように機能するでしょうか?

4

2 に答える 2

3

操作する場所を定義するブール値の配列を最初に作成すると、パフォーマンスが向上する場合があります。

big_3d_arr = some 100x100x100 array
where_to_operate_arr = big_3d_arr < 500 # or whatever your condition is
big_3d_arr[where_to_operate_arr] = do_something(big_3d_arr[where_to_operate_arr])

そのようなことはうまくいくかもしれませんが、アプリケーションによっては、ブール値のインデックス作成をチャンクで反復して実行する必要がある場合があります。

于 2013-05-16T16:22:17.020 に答える
3

基本的に、マスクされた配列を再作成しようとしています。このページは良い紹介を提供します。

于 2013-05-16T16:59:02.827 に答える