在python中找到最大非零矩阵

时间:2018-11-29 02:11:35

标签: python numpy matrix

假设我们有一个矩阵:

a = array([[ 2.,  3.,  0.,  0.,  0.],
           [ 0.,  4.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])

找到最大非零矩阵(即不完全为零的矩阵)并跨越所有元素的最佳方法是什么,例如

[[2.,3.],
 [0.,4.]]

我经历了numpy.nonzero,它给出了非零元素的索引,但是我如何有效地使用它来获得期望的矩阵?

矩阵必须为正方形。我现在已经提出了,

a[:np.nonzero(a)[0][-1]+1,:np.nonzero(a)[1][-1]+1]

有效。但似乎并不优雅。如果矩阵不是从0开始,它也将不起作用。

[[0,0,2,3,0],
 [0,0,0,4,0],
 [0,0,0,0,0],
 [0,0,0,0,0],
 [0,0,0,0,0]]

这里的预期输出是

[[2,3],
 [0,4]]

1 个答案:

答案 0 :(得分:0)

它在第二种情况下不起作用的原因是,由于始终指定结束范围,因此形成矩阵的起点始终为0,0

这将在两个轴上将np.nonzero的最小索引作为起始范围,将np.nonzero的最大索引作为终止范围。因此,保证包含所有非零元素

a[np.min(np.nonzero(a)[0]):np.max(np.nonzero(a)[0])+1,
  np.min(np.nonzero(a)[1]):np.max(np.nonzero(a)[1])+1]