删除稀疏矩阵的行和列

时间:2021-05-03 06:19:04

标签: python numpy sparse-matrix

我有一个很大的稀疏矩阵 (F)。我希望能够对其进行一些过滤以将其减少一点。我想删除所有符合以下条件的行/列。

  1. 删除行总和小于 50 的行
  2. 删除列总和 < 150 的列

我尝试了下面我认为可以用于索引的代码,但出现维度错误:

F = F[F.sum(axis=1)>=50][F.sum(axis=0)>=150]
IndexError                                Traceback (most recent call last)
<ipython-input-9-e13bff9f8066> in <module>()
----> 1 F = F[F.sum(axis=1)>=50][F.sum(axis=0)>=150]
/usr/local/lib/python3.7/dist-packages/numpy/matrixlib/defmatrix.py in __getitem__(self, index)
    191 
    192         try:
--> 193             out = N.ndarray.__getitem__(self, index)
    194         finally:
    195             self._getitem = False

IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed

我仍在学习 Python,所以感谢任何解释的帮助!

1 个答案:

答案 0 :(得分:0)

稀疏数组 .sum() 返回 np.matrix 而不是 ndarray 并且它在索引时表现得很奇怪(它是 2d 而不是您可能期望的 1d 数组)。

把它变成一个数组并结合索引,它工作正常:

F = F[(F.sum(axis=1)>=50).A.flatten(), (F.sum(axis=0)>=150).A.flatten()]