如何删除与 Scipy 稀疏矩阵的数字不同的元素?
How to remove elements different than numbers of a Scipy Sparse Matrix?
我有一个 COO sparse matrix,其中每个元素都是一个字典。我想按某些条件过滤该矩阵,但是当我尝试将矩阵乘以过滤器时,我得到一个异常 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
可以过滤 coo_matrix
,但并不简单。首先,您必须使用“True/False”值创建 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)
我有一个 COO sparse matrix,其中每个元素都是一个字典。我想按某些条件过滤该矩阵,但是当我尝试将矩阵乘以过滤器时,我得到一个异常 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
可以过滤 coo_matrix
,但并不简单。首先,您必须使用“True/False”值创建 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)