3

これには多くの時間がかかるため、最も内側の 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]

誰かがより良い方法を提案できますか?

4

3 に答える 3

5
for k in range(3):
    ind = m == n[:,:,k]
    new[ind] = old[:,:,k][ind]
于 2012-07-17T15:42:32.703 に答える
2

使用を見てください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]
于 2012-07-17T15:36:32.750 に答える
-1

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

于 2012-07-17T15:44:44.763 に答える