Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速有效的阵列减法_Python_Arrays - Fatal编程技术网

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()
工具书类