Matrix 朱莉娅稀疏矩阵

Matrix 朱莉娅稀疏矩阵,matrix,julia,sparse-matrix,Matrix,Julia,Sparse Matrix,我有向量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), l

我有向量
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(长度(Y_-vec)、最大值(Y_-vec)+1))
应该可以完成此操作。
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