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

标签 matrix normalization sparse-matrix julia

如果我使用稀疏(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/

相关文章:

python - 从冗长的字典生成时,Pandas DataFrame.from_dict() 性能不佳

python - 使用分类数据构造稀疏矩阵

r - R 中矩阵的每一行与另一个矩阵的叉积

opencv - 来自 View 矩阵的平移和旋转矢量(以及反向)

matlab - 向量化 matlab 列归一化

mysql - 如何将用户事件存储在mysql数据库中?

python - 在稀疏矩阵上执行外积求和

Mysql多变量线性回归

c++ - 错误 C2719 : '_Val' : formal parameter with __declspec(align ('16' )) won't be aligned?

mysql - 数据库优化/规范化 - 外键出现在 "too many"表中