python - 快速有效地减去数组的方法

标签 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 数组。

最佳答案

有两种方法可以根据您的需要...

  • 整形为 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()

引用资料

关于python - 快速有效地减去数组的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45609873/

相关文章:

python - 哪个 python web 框架可以轻松开发和部署?

python - 在 Python 中,测试函数的标准输出

python - 打印到 Komodo 的输出窗口

python - Xarray 如何绘制条形图?

python - 在 Python 中计算低阶近似

c - 使用临时变量或直接从数组更有效?

python - 循环显示python列表中的项目分组列表

ios - 所有用户都可以访问和更改的最有效的数据存储方式

java - 使用循环创建二维数组

c - 排列数组中的数字