これには多くの時間がかかるため、最も内側の for ループ (3 回反復するループ) だけを使用して、次のスニペットを実装したいと思います。
for i in arange(r):
for j in arange(c):
for k in arange(3):
if m[i,j]==n[i,j,k]:
new[i,j]=old[i,j,k]
誰かがより良い方法を提案できますか?
for k in range(3):
ind = m == n[:,:,k]
new[ind] = old[:,:,k][ind]
使用を見てくださいitertools.product
-numpy配列で使用したことはありませんが、機能する可能性があります(理由がわからない)
for i, j, k in itertools.product(arange(r), arange(c), arange(3)):
if m[i,j]==n[i,j,k]:
new[i,j]=old[i,j,k]
arange(c)
は eachi
およびarange(3)
各 couple に対して計算されるため(i, j)
、ループの外側でそれらを 1 回だけ計算すると、時間を節約できます。
range_j = arange(c)
range_3 = arange(3)
for i in arange(r):
for j in range_j:
for k in range_3:
if m[i,j]==n[i,j,k]:
new[i,j]=old[i,j,k]
もちろん、これらの範囲はi
とから独立しているため、これは有効ですj
。