我想只使用最里面的 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]
看看 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]
由于arange(c)
是为 eachi
和arange(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]
当然,这仅是有效的,因为这些范围独立于i
和j
。