Can anyone please vectorize the code I have?
    5 views (last 30 days)
  
       Show older comments
    
Input
J_org =
     0     2     0     1     0    -1    -1
     2     0     0    -1    -1     3     0
     0     0     0    -2     0     1     1
     1    -1    -2     0     2     0     0
     0    -1     0     2     0     0     1
    -1     3     1     0     0     0     0
    -1     0     1     0     1     0     0
J_upper = triu(J_upper);
J_indices = [ 0     1     0     2     0     3     4
     0     0     0     5     6     7     0
     0     0     0     8     0     9    10
     0     0     0     0    12     0     0
     0     0     0     0     0     0    13
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0]
Output: 
J_out =[  2     1    -1    -1    -1    -1     3    -2     1     1     0     2     1     0]
output J_out should be a flattened 1D vector where J_out(J_indices ) should be corresponding value from J_upper. If a J_index is missing (for example, 11 and 14 in my example), the value of that J_out will be zero. Length(J_out) should be ceil(0.5*length(J_org)*max(degree(graph(J_org)))). Here is my version of the code:
J_out  = zeros(1,ceil(0.5*length(J_org)*max(degree(graph(J_org)))));
for i = 1:length(J_org)
    for j =1:length(J_org)
        if J_indices(i,j)
            J_out (J_indices(i,j))= J_upper(i,j);
        end 
    end
end
0 Comments
Accepted Answer
  Bruno Luong
      
      
 on 14 May 2022
        
      Edited: Bruno Luong
      
      
 on 14 May 2022
  
      There is nothing in your data to guess that Jout must have 14 elements, the last index > 0 is 13.
J_org = [
    0     2     0     1     0    -1    -1
    2     0     0    -1    -1     3     0
    0     0     0    -2     0     1     1
    1    -1    -2     0     2     0     0
    0    -1     0     2     0     0     1
    -1     3     1     0     0     0     0
    -1     0     1     0     1     0     0]
J_upper = triu(J_org);
J_indices = [ 0     1     0     2     0     3     4
    0     0     0     5     6     7     0
    0     0     0     8     0     9    10
    0     0     0     0    12     0     0
    0     0     0     0     0     0    13
    0     0     0     0     0     0     0
    0     0     0     0     0     0     0]
Jut=J_upper.';
Jit = J_indices.';
b=Jit>0;
Jout = zeros(1,14); % or J_out  = zeros(1,ceil(0.5*length(J_org)*max(degree(graph(J_org)))))
Jout(Jit(b)) = Jut(b)
2 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
