首页 > 解决方案 > 如何删除与 Scipy 稀疏矩阵数量不同的元素?

问题描述

我有一个COO 稀疏矩阵,其中每个元素都是字典。我想通过某些条件过滤该矩阵,但是当我尝试将矩阵乘以过滤器时,我得到了一个异常TypeError: no supported conversion for types: (dtype('O'),)。有没有可能避免这个问题?

from scipy.sparse import coo_matrix
import numpy as np

row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = [{"x": 1}, {"y": -1}, {"x": -1}, {"x": 2}, {"t": -2}, {"z": 2}]
matrix = coo_matrix((data, (row, col)), shape=(3, 3))

matrix.multiply(np.array([0, 1, 0])) # Raises exception

标签: pythonnumpyscipysparse-matrix

解决方案


可以过滤 a coo_matrix,但这并不简单。首先,您必须filter mask使用“真/假”值创建您的值,然后使用它来索引矩阵的列、行和数据向量。

In [22]: mask = [True, False, False, True, False, False]

In [23]: matrix.data[mask]
Out[23]: array([{'x': 1}, {'x': 2}], dtype=object)

In [24]: matrix.col[mask]
Out[24]: array([0, 0], dtype=int32)

In [25]: matrix.col[row]
Out[25]: array([0, 0, 2, 2, 2, 2], dtype=int32)

In [26]: matrix.col[mask]
Out[26]: array([0, 0], dtype=int32)

推荐阅读