NumPy 数组可以使用 bool 数组进行索引,以选择与 True
条目对应的行:
>>> X = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> rows = np.array([True,False,True])
>>> X[rows]
array([[1, 2, 3],
[7, 8, 9]])
>>> X[np.logical_not(rows)]
array([[4, 5, 6]])
但这对于 SciPy 稀疏矩阵似乎是不可能的;索引被视为数字,因此 False
选择第 0 行,True
选择第 1 行。如何获得类似 NumPy 的行为?
最佳答案
您可以使用 np.nonzero
(或 ndarray.nonzero
)在你的 bool 数组上获取相应的数字索引,然后使用它们来访问稀疏矩阵。由于与密集的 ndarray
相比,稀疏矩阵上的“花式索引”非常有限,因此您需要解压缩 nonzero
返回的行元组并指定要检索所有列使用 :
切片:
>>> rows.nonzero()
(array([0, 2]),)
>>> indices = rows.nonzero()[0]
>>> indices
array([0, 2])
>>> sparse[indices, :]
<2x100 sparse matrix of type '<type 'numpy.float64'>'
with 6 stored elements in LInked List format>
关于python - 使用 bool 数组索引 SciPy 稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6408385/