python - 如何删除与 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
解决方案
可以过滤 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)
推荐阅读
- java - 实时数据库在 firebase 上不起作用
- ios - SwiftUI:如何在运行时更改根内容视图
- regex - 将长正则表达式拆分为多行?
- scala - 在 Scala spark 中实现动态字符串插值?
- visual-studio-code - 合并VSCode jupyter笔记本中的单元格?
- javascript - JS, let x = (Math.random()*2|0) 输出解释
- android - 哪种方式最适合在 Android 应用中播放 5 首歌曲?
- python - form_valid() 的 Django UpdateView 条件
- wpf - 样式资源中的事件未触发。为什么?
- sql-server - 为什么我无法从我的 Windows 计算机连接到 Linux MSSQL (SQLEXPRESS)?