Can anyone please vectorize the code I have?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Nadatimuj
am 14 Mai 2022
Kommentiert: Bruno Luong
am 14 Mai 2022
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 Kommentare
Akzeptierte Antwort
Bruno Luong
am 14 Mai 2022
Bearbeitet: Bruno Luong
am 14 Mai 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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!