X * Y项的平均值和保持numpy数组的尺寸

时间:2016-01-15 22:16:57

标签: python arrays numpy

如何在二维阵列上取平均值例如四个附近的项目(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))

2 个答案:

答案 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中)将提供该值。