我試圖刪除第i行和第i列,當行i 和第i列包含全0時。例如,在這種情況下,我們可以看到第0行全爲零,第0列全爲零,因此行和第0列被刪除。與行列對2和4相同。行1全是0,但列1不是這樣都不會被刪除。使用numpy高效地測試矩陣行和列
[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的例子來判斷,我相信是這樣的。當然,十字的行列索引必須匹配。 –
是的,這是我的意思是抱歉的混淆。 –