Python 快速有效的阵列减法
我有一大堆图像,我需要从每张图像中减去背景。初始堆栈是五维的,要减去的图像是二维的。减法在使用嵌套循环时效果很好,但在切换到Python 快速有效的阵列减法,python,arrays,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_cl
[:,:]
表示法时效果不好。你对如何解决这个问题有什么建议吗
换句话说,这是可行的
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\u clean
和B
都是numpy数组。有两种方法可以根据您的需要执行
- 重塑为
b=b.重塑((1,1,1,)+b.形状)
- 您可以像
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()
工具书类