有效地平均矩阵

2024-05-04 06:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,给定一个nxp矩阵,例如4x4,如何返回一个4x2的矩阵,它只是对矩阵的所有4行的前两列和最后两列求平均值?在

例如,给定:

a=数组([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]])

返回一个矩阵,该矩阵的平均值为[:,0]和[:,1]的平均值,以及[:,2]和[:,3]的平均值。 我希望这适用于nxp的任意矩阵,假设我平均n的列数显然可以被n整除

让我澄清一下:对于每一行,我要取前两列的平均值,然后取最后两列的平均值。所以应该是:

1+2/2,3+4/2<;-新矩阵的第1行 5+6/2、7+8/2<;-新矩阵的第2行等

这将产生一个4×2的矩阵而不是4×4。在

谢谢。在


Tags: lt矩阵数组平均值nxp列数
3条回答

对于n>;4的矩阵应该发生什么还不清楚,但是这段代码可以满足您的需要:

a = N.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], dtype=float)
avg = N.vstack((N.average(a[:,0:2], axis=1), N.average(a[:,2:4], axis=1))).T

这将产生avg =

^{pr2}$

用点数学怎么样?您可以定义一个矩阵M = [[0.5,0],[0.5,0],[0,0.5],[0,0.5]],这样A*M就是您想要的。在

from numpy import array, matrix

A = array([[1, 2, 3, 4], 
           [5, 6, 7, 8], 
           [9, 10, 11, 12], 
           [13, 14, 15, 16]])
M = matrix([[0.5,0],
            [0.5,0],
            [0,0.5],
            [0,0.5]])
print A*M

生成M也很简单,条目是1/n或零。在

改头换面

>>> a.reshape(-1, a.shape[1]//2).mean(1).reshape(a.shape[0],-1)
array([[  1.5,   3.5],
       [  5.5,   7.5],
       [  9.5,  11.5],
       [ 13.5,  15.5]])

对任何数组大小都有效,而“整形”不会生成副本。在

相关问题 更多 >