我有大量的图像,我需要从每个图像中减去背景。初始堆栈是五维的,要减去的图像是二维的。使用嵌套循环可以很好地进行减法,但是当我切换到[:,:]
表示法时,减法效果不佳。你对如何解决这个问题有任何建议吗?
换句话说,这是有效的
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[:,:]
A
,A_clean
和B
都是numpy数组。
答案 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()