gpt4 book ai didi

python - Numpy 没有给出预期的形状

转载 作者:行者123 更新时间:2023-12-04 16:04:52 24 4
gpt4 key购买 nike

问题相当简单。给定 256x256 灰度图像,我想根据阈值返回带有颜色的彩色图像。

所以我在想:

img=whatever # 2D array of floats representing grayscale image
threshold=0.5
color1=[1.0,0.0,0.0]
color2=[0.0,0.0,1.0]
newImg=np.where(img>threshold,color1,color2)

然而我得到了臭名昭著的:
“ValueError:操作数无法与形状(500,500)(3,)(3,)一起广播”

嗯?我真的期待给出一个数组形状(500,500,3)。为什么不把它们结合起来??

最佳答案

你误会了numpy.where作品。看起来您可能认为对于 img>threshold 的 True 单元格, where选取整个 color1作为一个值,对于 False 单元格,它选择整个 color2 .不管你在想什么,这不是它的工作原理。
numpy.where broadcasts参数放在一起,然后对于第一个参数的每个单元格,选择第二个或第三个参数的相应单元格。要产生形状为 (500, 500, 3) 的结果,参数必须一起广播为 (500, 500, 3) 的形状。您的输入根本不是广播兼容的。

使广播工作的一种方法是在 img>threshold 的末尾添加一个额外的长度为 1 的维度。 :

newImg=np.where((img>threshold)[..., None],color1,color2)

如果您不熟悉广播,使用 numpy.broadcast_arrays 可能会有所帮助看看一起广播多个数组的结果是什么样的。

关于python - Numpy 没有给出预期的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com