gpt4 book ai didi

python - Julia 中的 "colptr"及其在 Python 中的对应项是什么?

转载 作者:行者123 更新时间:2023-12-01 23:41:01 25 4
gpt4 key购买 nike

我正在尝试将一些 Julia 代码重写为 python 代码。我刚刚发现 colptr 附加到稀疏矩阵。我搜索了它,但我仍然不明白它是什么。有人可以向我提供有关它的信息和 python 3 中的对应信息吗?提前谢谢你。

[编辑]这是来自 Julia's references

struct SparseMatrixCSC{Tv,Ti<:Integer} <: AbstractSparseMatrix{Tv,Ti}
m::Int # Number of rows
n::Int # Number of columns
colptr::Vector{Ti} # Column j is in colptr[j]:(colptr[j+1]-1)
rowval::Vector{Ti} # Row indices of stored values
nzval::Vector{Tv} # Stored values, typically nonzeros

例如,A.colptr[j] 是指 CSC 矩阵 A 的第 j 列的所有元素吗?

我试图通过运行下面的一些简单代码来解决这个问题,

A = sparse([1, 1, 2, 3], [1, 3, 2, 3], [0, 1, 2, 0])

for i=1:4
println(A.colptr[i])
end

结果是

1235

我仍然不知道为什么结果会是这样。解释说

Ti is the integer type for storing column pointers

最佳答案

您正在查看矩阵的压缩稀疏列 (CSC) 表示。例如,不是在内存中按顺序存储所有矩阵的值,而是只允许存储非零值。例如矩阵

5  0  0
6 0 7
1 0 3
0 2 0

可以或者作为列主序列存储在内存中 5 6 1 0 0 0 0 2 0 7 3 0 或者你可以做一些更聪明的事情。

如果您只存储非零元素的列主序列,您最终会得到一个更短的列表:5 6 1 2 7 3!但现在您需要一种方法将这些值映射回它们在矩阵中的位置。您需要一个 索引和一个 索引。因此,我们还有两个列表:

每个存储值的行索引也可以以一对一的方式存储:1 2 3 4 2 3

现在,我可以以类似的一对一方式存储列索引:1 1 1 2 3 3。如果我这样做,这将是一种稀疏坐标 (COO) 格式。但请注意,这里有很多冗余信息:看看所有那些重复的值!通用 CSC 格式进一步压缩了这一点。我已经知道我有三列;我可以简单地存储每列开始的位置。这是 colptr:它的每一列都有一个值,并且指向该列的开始位置。因此不需要存储六个值,它只需要存储三个:第一列从索引一开始(当然)。第二列从索引 4 开始,第三列从索引 5 开始。事实证明,如果我们还存储最后的第四个值,表示最后一个值,这会让生活变得更容易一些,因为这样我们就可以描述特定列中的非零值只需说 j 列中的存储值 可以在 nzval[colptr[j]:colptr[j+1]-1].

典型的 Python 等价物在 scipy 中:scipy.sparse.csc_matrix ;简单地替换 colptr -> indptr, indices -> rowval, nzval -> data 并容纳从 0 开始的索引。

关于python - Julia 中的 "colptr"及其在 Python 中的对应项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64971750/

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