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

看看 using 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)是为 eachiarange(3)每对 couple(i, j)计算的,因此在循环外一劳永逸地计算它们可以节省一些时间:

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]

当然,这仅是有效的,因为这些范围独立于ij

于 2012-07-17T15:44:44.763 回答