2015-11-06 284 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