You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字典格式稀疏矩阵转换为numpy的csr_matrix格式

报错原因

你遇到的报错是因为scipy.sparse.csr_matrix(注意:CSR矩阵属于scipy的稀疏矩阵模块,不是numpy原生类型)不直接支持以(行索引, 列索引)为键的字典作为输入。直接传入字典时,scipy会将其识别为object类型的普通对象,无法解析为稀疏矩阵结构,因此抛出TypeError: no supported conversion for types: (dtype('O'),)错误。

正确转换方法

有两种常用的转换方案可选:

方案1:拆分字典直接构造CSR矩阵

你的字典结构已经包含了所有非零元素的坐标与值,只需要拆分为行索引数组、列索引数组、数值数组三个部分,再传入构造即可:

from scipy.sparse import csr_matrix

# 拆分字典得到三个序列
rows, cols, data = zip(*[(r, c, v) for (r, c), v in sparse_mat.items()])
# 计算矩阵总行列数,也可根据实际业务需求手动指定
n_rows = max(rows) + 1
n_cols = max(cols) + 1

# 构造CSR矩阵
csr_mat = csr_matrix((data, (rows, cols)), shape=(n_rows, n_cols))

方案2:通过DOK矩阵中转

DOK(Dictionary Of Keys)是scipy稀疏矩阵的一种存储格式,天生就是以(行,列)元组为键、值为对应元素值的字典结构,完全匹配你现有的字典格式,可以直接转换:

from scipy.sparse import dok_matrix, csr_matrix

# 计算矩阵总行列数
n_rows = max(k[0] for k in sparse_mat.keys()) + 1
n_cols = max(k[1] for k in sparse_mat.keys()) + 1

# 初始化DOK矩阵并导入数据
dok_mat = dok_matrix((n_rows, n_cols))
dok_mat.update(sparse_mat)

# 转换为CSR格式
csr_mat = dok_mat.tocsr()

转换完成后可以调用csr_mat.toarray()生成稠密矩阵,验证转换结果是否符合预期。

内容的提问来源于stack exchange,提问作者muds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:06:04