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

是否有PyArrow原生方法实现SparseCOOTensor转Sparse CSR/CSC Matrix?

PyArrow SparseCOOTensor 转 SciPy CSR/CSC 矩阵

PyArrow本身没有提供直接转换为SciPy CSR/CSC矩阵的内置API,但不需要完全自定义复杂函数——可以通过提取PyArrow稀疏张量的核心数据,再借助SciPy的稀疏矩阵构造器快速完成转换,流程和SciPy自身的稀疏矩阵转换逻辑一致。

具体转换步骤

  • 从SparseCOOTensor中提取关键数据:
    • 用tensor.indices获取二维索引数组,第一维度对应行索引,第二维度对应列索引
    • 用tensor.values获取所有非零值数组
  • 将PyArrow数组转换为NumPy数组(SciPy稀疏矩阵构造器支持NumPy输入)
  • 调用SciPy的csr_matrix或csc_matrix构造目标稀疏矩阵

示例代码

import pyarrow as pa
import scipy.sparse as sp

# 构造一个PyArrow SparseCOOTensor示例
indices = pa.array([[0, 1, 2], [1, 2, 0]])  # 行索引、列索引
values = pa.array([10, 20, 30])
shape = (3, 3)
coo_tensor = pa.SparseCOOTensor.from_arrays(indices, values, shape=shape)

# 提取数据并转为NumPy数组
rows = coo_tensor.indices[0].to_numpy()
cols = coo_tensor.indices[1].to_numpy()
vals = coo_tensor.values.to_numpy()

# 转换为CSR矩阵
csr_mat = sp.csr_matrix((vals, (rows, cols)), shape=coo_tensor.shape)

# 转换为CSC矩阵
csc_mat = sp.csc_matrix((vals, (rows, cols)), shape=coo_tensor.shape)

注意事项

  • 转换时要确保PyArrow数组的数据类型与NumPy兼容,比如PyArrow的int64与NumPy的int64可以无缝转换
  • SciPy的CSR/CSC仅支持二维结构,如果是高维SparseCOOTensor,需要先将其降维为二维后再执行转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:23:15