是否可以在同意中删除矩阵的所有零列和行?

时间:2018-03-29 16:09:13

标签: python sympy

我有一个像这样的矩阵:

enter image description here

我想删除零行和列,是否有一种快速的方式来表达同意?感谢。

1 个答案:

答案 0 :(得分:0)

方法row_delcol_del允许一次删除一行或一列。看起来你可能有几个这样的,所以一次做这一步可能会很慢。

我可能会使用高级索引,传递保留的行号和列号列表。

A = Matrix([[0, 0, 0, 0], [0, 1, 2, 3], [0, a, b, c], [0, 7, 8, 9]])
m, n = A.shape
rows = [i for i in range(m) if any(A[i, j] != 0 for j in range(n))]
cols = [j for j in range(n) if any(A[i, j] != 0 for i in range(m))]
A = A[rows, cols]

或者,如果你不介意使用NumPy,这可能会更短一些。

import numpy as np
A = Matrix([[0, 0, 0, 0], [0, 1, 2, 3], [0, a, b, c], [0, 7, 8, 9]])
B = np.array(A)
A = Matrix(B[np.ix_(np.any(B != 0, axis=0), np.any(B != 0, axis=1))])