gpt4 book ai didi

python - 有没有类似 coo_matrix 的东西,但是对于稀疏向量?

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:24 25 4
gpt4 key购买 nike

我正在尝试从一系列存在一些重叠索引的数组创建一个稀疏向量。对于矩阵来说,有一个非常convenient object in scipy这正是这样做的:

coo_matrix((data, (i, j)), [shape=(M, N)])

因此,如果数据碰巧具有重复元素(因为它们的 i,j 索引相同),那么这些元素将在最终的稀疏矩阵中求和。我想知道是否可以对稀疏向量做类似的事情,或者我是否只需使用这个对象并假装它是一个 1 列矩阵?

最佳答案

虽然您可能能够重现一维等效矩阵,但仅使用 1 行(或 1 列)稀疏矩阵会节省大量工作。我不知道 numpy 有任何稀疏向量包。

coo 格式完全按照您给定的方式存储输入数组,而不进行求和。当显示或(以其他方式)转换为 csccsr 格式时,求和就完成了。由于 csr 构造函数已编译,因此它的求和速度比您在 Python 中编写的任何代码都要快。

构造一个“1d”稀疏 coo 矩阵

In [67]: data=[10,11,12,14,15,16]    
In [68]: col=[1,2,1,5,7,5]
In [70]: M=sparse.coo_matrix((data (np.zeros(len(col)),col)),shape=(1,10))

查看其数据表示(无求和)

In [71]: M.data
Out[71]: array([10, 11, 12, 14, 15, 16])
In [72]: M.row
Out[72]: array([0, 0, 0, 0, 0, 0])
In [73]: M.col
Out[73]: array([1, 2, 1, 5, 7, 5])

查看数组表示形式(形状(1,10))

In [74]: M.A
Out[74]: array([[ 0, 22, 11, 0, 0, 30, 0, 15, 0, 0]])

以及企业社会责任等效项。

In [75]: M1=M.tocsr()
In [76]: M1.data
Out[76]: array([22, 11, 30, 15])
In [77]: M1.indices
Out[77]: array([1, 2, 5, 7])
In [78]: M1.indptr
Out[78]: array([0, 4])

In [79]: np.nonzero(M.A)
Out[79]: (array([0, 0, 0, 0]), array([1, 2, 5, 7]))

nonzero 显示相同的模式:

In [80]: M.nonzero()
Out[80]: (array([0, 0, 0, 0, 0, 0]), array([1, 2, 1, 5, 7, 5]))

In [81]: M.tocsr().nonzero()
Out[81]: (array([0, 0, 0, 0]), array([1, 2, 5, 7]))

In [82]: np.nonzero(M.A)
Out[82]: (array([0, 0, 0, 0]), array([1, 2, 5, 7]))

M.toarray().flatten() 将为您提供 (10,) 一维数组。

关于python - 有没有类似 coo_matrix 的东西,但是对于稀疏向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565798/

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