首页 > 解决方案 > Python numpy.compress() 减少矩阵

问题描述

我想使用向量unumpy.compress()方法来减少 NumPy 矩阵,首先是行,然后是列。现在我的代码如下所示:

n = 4 #number of rows/columns
square_matrix = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
u = np.array([1,0,1,0])

v = []

for i in range(n):
    v.append(np.compress(u,square_matrix[i]))

print(v)

我得到以下输出:

[array([1, 3]), array([5, 7]), array([ 9, 11]), array([13, 15])]

我有两个问题:

  1. 我现在如何再次从输出创建矩阵。
  2. 我怎么能对列重复相同的过程。(我最初的想法是使用 的转置u,如下所示:
for j in range((len(v_matrix[0])-1)):
    w.append(np.compress(u.transpose(),v_matrix[:][j]))

标签: pythonnumpymatrix

解决方案


  1. 我现在如何再次从输出创建矩阵。

您可以以矢量化的方式进行操作,只需指定axis关键字np.compress

np.compress(u, square_matrix, axis=1)

输出:

array([[ 1,  3],
       [ 5,  7],
       [ 9, 11],
       [13, 15]])
  1. 我怎么能对列重复相同的过程。(我最初的想法是使用 u 的转置)

您的建议是正确的,但转置矩阵而不是u. 这将用行切换列。

np.compress(u, square_matrix.T, axis=1)

输出:

array([[ 1,  9],
       [ 2, 10],
       [ 3, 11],
       [ 4, 12]])

推荐阅读