快速有效的减去数组的方法

时间:2017-08-10 09:36:14

标签: python arrays

我有大量的图像,我需要从每个图像中减去背景。初始堆栈是五维的,要减去的图像是二维的。使用嵌套循环可以很好地进行减法,但是当我切换到[:,:]表示法时,减法效果不佳。你对如何解决这个问题有任何建议吗?

换句话说,这是有效的

for aa in range(B.shape[0]):
    for bb in range(B.shape[1]):
        A_clean[i,j,k,aa,bb] = A[i,j,k,aa,bb] - B[aa,bb]

而且,我更喜欢使用它,因为它更快,但不是

A_clean[i,j,k,:,:] = A[i,j,k,:,:] - B[:,:]

AA_cleanB都是numpy数组。

1 个答案:

答案 0 :(得分:2)

您可以根据需要采取两种方法......

  • 重塑为b = b.reshape((1,1,1,)+b.shape)
  • 您可以索引b[np.newaxis, np.newaxis, np.newaxis, :, :]

以下是一个示例和测试

import numpy as np

a = np.random.random((4,4,4,4,4))
b = np.zeros((4,4)) - 9999

b_adj = b.reshape((1,1,1,4,4)) # the reshape

res_validation = a.copy()
for aa in range(b.shape[0]):
    for bb in range(b.shape[1]):
        res[:,:,:,aa,bb] = a[:,:,:,aa,bb] - b[aa,bb]

检查结果

res = a - b_adj
(res == res_validation ).all()

参考