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

标签 python python-3.x julia

我正在尝试将一些 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

结果是

1 2 3 5

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

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/

相关文章:

python - 如何拆分Python中同一行的一些信息?

python - Tensorflow:可变序列长度和批量大小

python - 从包中获取 Python 包分发版本

python - 不区分大小写的 argparse 选择不会丢失选择列表中的大小写信息

mysql - 在 mysql datetime 和 python timestamp 之间转换的正确方法是什么?

julia - 无法在 Atom 中启动 Julia(LoadError : ArgumentError: Juno not found in path)

python - 'tf.get_default_session()'的用途

python - Django - 自定义模板标签传递关键字参数

julia - 为什么 Julia 开发者将 `NA` 重命名为 `missing`

arrays - 将 Julia 数组转换为数据帧