【发布时间】:2018-03-28 05:34:41
【问题描述】:
当第 i 行 和 i 列都包含全 0 时,我正在尝试删除第 i 行和第 i 列。例如,在这种情况下,我们可以看到第 0 行全为零,第 0 列全为零,因此删除了第 0 行和第 0 列。与第 2 行和第 4 行列对相同。第 1 行全为零,但第 1 列不是,因此两者都不会被删除。
[0,0,0,0,0]
[0,1,0,1,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
会变成
[1,1]
[0,0]
另一个例子:
[0,0,1,0,0,1]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,1,0,1,0]
将更改为:
[0,1,0,1]
[0,0,0,0]
[0,0,0,0]
[0,1,1,0]
这是我用来计算的代码:
def remove(matrix):
for i, x in reversed(list(enumerate(matrix))):
if np.all(matrix == 0, axis=0)[i] and np.all(matrix == 0, axis=1)[i]:
matrix = np.delete(matrix,i,axis=0)
matrix = np.delete(matrix,i,axis=1)
return matrix
经过测试,这条线目前花费的时间最多:
if np.all(matrix == 0, axis=0)[i] and np.all(matrix == 0, axis=1)[i]:
有没有更合适的方式来以这种方式测试行和列?我使用的矩阵是一个稀疏的二进制矩阵。我没有使用任何稀疏矩阵类,只是 ndarray。
【问题讨论】:
-
不-一开始我也是这么想的,但我相信原始问题想在两者都为零时同时删除列和行。
-
从 OP 的例子来看,我相信是这样。交叉的行和列索引当然必须匹配。
-
是的,这就是我的意思,很抱歉造成混乱。
-
@RamseyBissex 请使用正确的预期输出编辑问题。此外,如果可能,请使用更大/更通用的示例案例并向我们展示预期的输出。
-
我们现在应该修复了,感谢您的耐心等待。
标签: python performance numpy matrix sparse-matrix