2015-11-06 162 views
0

我有载体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; ],使用for循环失败!如何解决这个问题。

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

+0

的问题不是连续的'y_vec'是因为没有足够的列。将'Y_mat'初始化更改为:'Y_mat = full(spzeros(length(y_vec),maximum(y_vec)+1))'应该做到这一点。 –

回答

2

可以使用稀疏矩阵构造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 
+0

真棒,完美。 – AtomicScience