如何在二维阵列上取平均值例如四个附近的项目(2 * 2)?我的意见是:
[[1,1,1,1],
[1,1,0,0],
[0,0,1,1],
[0,0,0,0]]
应该导致:
[[1, 0.5],
[0, 0.5]]
numpy.mean(x.reshape(-1,4),1)将展平数组并平均错误排列四个项目。
其他信息
例如,通过此方法生成数组:
n = 10
l = 100
A = np.zeros((l, l))
points = l*np.random.random((2, n**2))
A[(points[0]).astype(np.int), (points[1]).astype(np.int)] = 1
A = ndimage.gaussian_filter(A, sigma=l/(4.*n))
答案 0 :(得分:3)
这是重塑和总结的一种方式 -
m,n = A.shape
A.reshape(m/2,2,n/2,2).sum(axis=(1,3))/4.0
当然,它假设行数和列数可以被2
整除。
示例运行 -
In [87]: A
Out[87]:
array([[8, 4, 6, 8, 1, 1],
[6, 7, 8, 5, 3, 4],
[1, 8, 8, 4, 7, 6],
[1, 8, 7, 7, 2, 4]])
In [88]: m,n = A.shape
In [89]: A.reshape(m/2,2,n/2,2).sum(axis=(1,3))/4.0
Out[89]:
array([[ 6.25, 6.75, 2.25],
[ 4.5 , 6.5 , 4.75]])
答案 1 :(得分:2)
您也可以使用2D过滤器:
import numpy as np
from scipy import ndimage
A=np.array([[1,1,1,1],
[1,1,0,0],
[0,0,1,1],
[0,0,0,0]],dtype=float)
k=np.array([[1,1],[1,1]])/4.
B=ndimage.convolve(A, k, mode='constant', cval=0.0)
C=B[0:-1:2,0:-1:2]
B包含空间平均值,其中2x2窗口以1为步长移动。如果您只希望空间平均值超过2x2区域,则适当的索引(如C中)将提供该值。