gpt4 book ai didi

matrix - 在 Julia 中,如何对稀疏矩阵进行列归一化?

转载 作者:行者123 更新时间:2023-12-02 09:44:22 28 4
gpt4 key购买 nike

如果我使用稀疏(i, j, k) 构造函数构造了一个稀疏矩阵,那么如何标准化矩阵的列(以便每列之和为 1)?在创建矩阵之前,我无法有效地标准化条目,因此我们将不胜感激。谢谢!

最佳答案

最简单的方法是广播除以列的总和:

julia> A = sprand(4,5,.5)
A./sum(A,1)
4x5 Array{Float64,2}:
0.0 0.0989976 0.0 0.0 0.0795486
0.420754 0.458653 0.0986313 0.0 0.0
0.0785525 0.442349 0.0 0.856136 0.920451
0.500693 0.0 0.901369 0.143864 0.0

…但看起来还没有针对稀疏矩阵进行优化,并且回退到完整矩阵。因此,一个简单的循环来迭代列就可以解决问题:

julia> for (col,s) in enumerate(sum(A,1))
s == 0 && continue # What does a "normalized" column with a sum of zero look like?
A[:,col] = A[:,col]/s
end
A
4x5 sparse matrix with 12 Float64 entries:
[2, 1] = 0.420754
[3, 1] = 0.0785525
[4, 1] = 0.500693
[1, 2] = 0.0989976
[2, 2] = 0.458653
[3, 2] = 0.442349
[2, 3] = 0.0986313
[4, 3] = 0.901369
[3, 4] = 0.856136
[4, 4] = 0.143864
[1, 5] = 0.0795486
[3, 5] = 0.920451

julia> sum(A,1)
1x5 Array{Float64,2}:
1.0 1.0 1.0 1.0 1.0

这完全在稀疏矩阵内工作,并且就地完成(尽管它仍然为每个列切片分配新的稀疏矩阵)。

关于matrix - 在 Julia 中,如何对稀疏矩阵进行列归一化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296856/

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