Python 通过对像素求和来重新缩放矩阵

Python 通过对像素求和来重新缩放矩阵,python,numpy,matrix,resize,Python,Numpy,Matrix,Resize,是否有一种通过简单地添加相邻像素来重新缩放矩阵的快速方法 因此,对于一个X=N*M矩阵,你会得到一个Y=(N/N)*(N/M),其中N*M是我应该添加像素的区域 我一直在手动(通过脚本)完成这项工作,但我认为一定有办法做到这一点 for i in range(0, X.shape[0]/n): for j in range(0, X.shape[1]/m): Y[i, j] = np.sum(X[i*n:i*n+n, j*m:j*m+m]) 例如 您可以使用函数和以下命

是否有一种通过简单地添加相邻像素来重新缩放矩阵的快速方法

因此,对于一个
X=N*M
矩阵,你会得到一个
Y=(N/N)*(N/M)
,其中
N*M
是我应该添加像素的区域

我一直在手动(通过脚本)完成这项工作,但我认为一定有办法做到这一点

for i in range(0, X.shape[0]/n):
    for j in range(0, X.shape[1]/m):
        Y[i, j] = np.sum(X[i*n:i*n+n, j*m:j*m+m])
例如


您可以使用函数和以下命令对代码进行矢量化:

N
M
必须分别是
N
M
的整数倍。否则将出现以下错误:

ValueError:
块形状
与中的
arr\u不兼容

样本运行

In [74]: X
Out[74]: 
array([[5, 6, 3, 7],
       [5, 0, 3, 0],
       [6, 1, 8, 0],
       [4, 0, 7, 2]])

In [75]: Y
Out[75]: 
array([[16, 13],
       [11, 17]])

一种纯粹的方法是将矩阵重塑为更多的轴,并在适当的轴上求和

Y = X.reshape(X.shape[0]/n, n, X.shape[1]/m, m).sum((1, 3))

只是使用了[[1,1],[1,1]]内核的卷积和2像素的过程
In [74]: X
Out[74]: 
array([[5, 6, 3, 7],
       [5, 0, 3, 0],
       [6, 1, 8, 0],
       [4, 0, 7, 2]])

In [75]: Y
Out[75]: 
array([[16, 13],
       [11, 17]])
Y = X.reshape(X.shape[0]/n, n, X.shape[1]/m, m).sum((1, 3))