gpt4 book ai didi

python - 作为 DataFrame 列的 Scipy 稀疏矩阵

转载 作者:行者123 更新时间:2023-11-28 18:28:26 25 4
gpt4 key购买 nike

我正在开发基于 pandas DataFrame 对象的工具。我想将 scipy 稀疏矩阵保留为 DataFrame 的列,而不将其逐行转换为 dtype('O') 的列表/numpy 数组。

下面的代码片段不起作用,因为 pandas 将矩阵视为标量,并建议添加索引。当在矩阵中的行索引上提供 pd.RangeIndex 时,矩阵会为数据帧中的每一行重复(因为 pandas 认为它​​是标量)。

ma = scipy.sparse.rand(10, 100, 0.1, 'csr', dtype=np.float64)
df = pd.DataFrame(dict(X=ma))

这确实有效:

df = pd.DataFrame(dict(X=list(ma)))

但是,这会将矩阵逐行切割成 CSR 矩阵,每行 1 行。每次我想处理原始矩阵时,我都需要 vstack。

有什么指点吗?我尝试将 CSR 矩阵包装到 pd.Series 对象中,假装它具有 dtype('O'),但我遇到了很多关于底层数据是 numpy 数组等的假设。

最佳答案

存在稀疏数据框或数据系列功能。它仍然是实验性的。我已经回答了一些关于在 scipy 稀疏矩阵之间来回转换的问题。

从侧边栏:

Populate a Pandas SparseDataFrame from a SciPy Sparse Coo Matrix

如果没有这种专门的 pandas 结构,我看不出如何将稀疏矩阵添加到 pandas 框架中。稀疏矩阵的内部结构差异太大。首先,它不是 numpy 数组的子类。

csr 矩阵是一个对象,数据包含在 3 个数组中,ma.datama.indices 是具有一个值的一维数组对于数组的每个非零元素。 ma.indptr 对矩阵的每一行都有一个值。

list(ma) 没有意义。 ma.toarray() 生成具有相同数据的二维数组,并且所有这些零也将被填充。

其他稀疏矩阵格式将它们的数据存储在其他结构中 - coo 的 3 个等长数组,lil 的两个列表列表和 dok 的字典

关于python - 作为 DataFrame 列的 Scipy 稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39442979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com