是否有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
相关产品推荐
相关产品推荐

