Python中使用numpy和scipy对图块进行均值减法

1 投票
2 回答
1229 浏览
提问于 2025-04-16 22:59

我有一个三维的numpy数组,它是一个8x8图像块的网格。

我想从每个图像块中减去它的平均值,也就是说,每个图像块都有一个独特的平均值,我想把这个平均值减去。我尝试了以下方法,但显然没有成功,因为两个数组的形状不一样。

patches=- patches.mean(axis = 2).mean(axis = 1)

我想到了使用重复函数,类似这样的:

patches=- np.repeat(np.repeat(patches.mean(axis =2).mean(axis =1).reshape((n_patches, 8, 8)), 1, 1))

但是我觉得这样做可能会导致效率低下。你有什么想法或者解决方案吗?

2 个回答

3

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,去寻找解决方案或者向其他人请教。

在这些论坛上,很多人会分享他们的经验和解决方法。你可以看到他们提到的代码示例、错误信息和解决步骤。这些内容通常会帮助你更好地理解问题所在,并找到合适的解决办法。

记得在提问的时候,尽量把你的问题描述清楚,附上相关的代码和错误信息,这样其他人才能更好地帮助你。

import numpy as np
a = np.random.rand(10,8,8)
mean = a.mean(axis=2).mean(axis=1)
b = a - mean[:, np.newaxis, np.newaxis] # reshape the mean as (10, 1, 1)
1

我觉得你在找“广播”这个概念:

http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

撰写回答