【问题标题】:Julia sparse matrixJulia 稀疏矩阵
【发布时间】:2015-11-06 01:21:45
【问题描述】:

我有向量y_vec,如何将向量转换为Y_matrix形式的矩阵

y_vec = [0; 1; 1; 2; 3; 4]

Y_matrix = [1 0 0 0 0
            0 1 0 0 0
            0 1 0 0 0
            0 0 1 0 0
            0 0 0 1 0
            0 0 0 0 1]

到目前为止,我已经尝试过使用 for 循环。

Y_mat = full(spzeros(length(y_vec), length(unique(y_vec))))

for (i,j) in enumerate(1:length(y_vec))
    Y_mat[i, y_vec[j]+1] = 1
end

但是,当y_vec 不连续时似乎有问题,比如y_vec = [0; 1个; 1个; 2; 3; 4; 8],使用 for 循环失败!!!如何解决这个问题。

有没有办法在Julia中使用稀疏矩阵来解决上述问题。

【问题讨论】:

  • y_vec不连续的问题是因为没有足够的列。将 Y_mat 初始化更改为:Y_mat = full(spzeros(length(y_vec), maximum(y_vec)+1)) 应该可以解决问题。

标签: matrix julia sparse-matrix


【解决方案1】:

你可以使用稀疏矩阵构造函数sparse(I,J,V):

y_vec = [0; 1; 1; 2; 3; 4; 8]
I = collect(1:length(y_vec))
J = y_vec+1
V = ones(length(y_vec))
S = sparse(I,J,V)
full(S)

julia> full(S)
7x9 Array{Float64,2}:
 1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多