平均矩阵有效

6 python numpy scipy

在Python中,给定一个nxp矩阵,例如4 x 4,我怎样才能返回一个4 x 2的矩阵,它只是平均前两列和矩阵的所有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行1 + 6/2,7 + 8/2 <新矩阵的第2行等.

它应该产生4乘2的矩阵而不是4 x 4.

谢谢.

Joc*_*zel 5

用一些数学怎么样?您可以定义矩阵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
Run Code Online (Sandbox Code Playgroud)

生成M也很简单,条目1/n为零.


pto*_*ato 1

对于 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
Run Code Online (Sandbox Code Playgroud)

这产生avg =

array([[  1.5,   3.5],
       [  5.5,   7.5],
       [  9.5,  11.5],
       [ 13.5,  15.5]])
Run Code Online (Sandbox Code Playgroud)