【发布时间】:2017-05-24 03:13:22
【问题描述】:
我有一个 3D 维度数组 (200,200,3)。这些是使用 numpy.dstack 堆叠的尺寸 (200,200) 的图像。我想计算沿axis = 2的值的数量,这些值大于相应的二维阈值数组(200,200)。输出计数数组应具有维度 (200,200)。到目前为止,这是我的代码。
import numpy as np
stacked_images=np.random.rand(200,200,3)
threshold=np.random.rand(200,200)
counts=(stacked_images<threshold).sum(axis=2)
我收到以下错误。
ValueError: operands could not be broadcast together with shapes (200,200,3) (200,200)
如果阈值是整数/浮点值,则代码有效。例如。
threshold=0.3
counts=(stacked_images<threshold).sum(axis=2)
如果阈值是二维数组,有没有一种简单的方法可以做到这一点?我想我没有正确理解 numpy 广播规则。
【问题讨论】:
-
将
thresh扩展到3D:(stacked_images > threshold[...,None]).sum(2)。 -
@kazemakase 我查看了您之前提供的链接。给出的一般答案是正确查看 numpy 广播规则。但是,我不知道如何将我的数组扩展到 3D。
-
@Divakar 您的解决方案有效。谢谢! :)
标签: arrays python-3.x numpy multidimensional-array array-broadcasting