gpt4 book ai didi

python - np.mean() 的值错误?

转载 作者:行者123 更新时间:2023-12-03 08:50:09 24 4
gpt4 key购买 nike

我对编程(Python)很陌生,所以我不明白这里发生了什么。我有一个图像 (35x64) 作为 3D 数组,并使用 np.mean(),我尝试提取一行的一个颜色 channel 的平均值:

print(np.mean(img[30][:][0]))

为了进行比较,我还编写了一个 for 循环来在列表中附加完全相同的值并用其计算平均值:

for i in range(64):
img_list.append(img[30][i][0])
print(np.mean(img_list))

现在,由于一个奇怪的原因,它给出了不同的值:

First output: 117.1
Second output: 65.7

通过查看列表,我发现第二个是正确的。有更多经验的人可以向我解释为什么会发生这种情况以及如何解决这个问题吗?我不想在程序中使用第二个更长的代码块,但正在寻找能够提供正确值的 1 行解决方案。

最佳答案

img[30][:][0]img[30,:,0] (您所期望的)之间存在细微差别。让我们看一个例子:

img = np.arange(35*64*3).reshape(35,64,3)
img[30][:][0]
# array([5760, 5761, 5762])
img[30,:,0]
# array([5760, 5763, ... 5946, 5949])

所以你只需要:

print(np.mean(img[30,:,0]))

(无论如何,这更有效)。

一些细节:在原始语法中,[:] 实际上只是触发数组的副本:

xx = img[30]
yy = img[30][:]
print (xx is yy, xx.shape, yy.shape, np.all(xx==yy))
# False (64, 3) (64, 3) True # i.e. both array are equal

因此,当您获取 img[30][:][0] 时,您实际上获得了第 30 行第一个像素的 3 种颜色。

关于python - np.mean() 的值错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502791/

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