Convert matlab index vector to 2D array based on gaps
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
ErikJ GiesenLoo
am 21 Dez. 2023
Bearbeitet: Dyuman Joshi
am 24 Dez. 2023
Hi all,
I am asking to get feedback on my code and see if there are other ways to programme this basic algorithm more efficiently or elegantly.
out = segments([1 end]); % Start point of first interval
for idx = find(diff(segments) > 1) % Iterate over gaps
out(end, 2) = segments(idx); % End point of current interval
out(end + 1, 1) = segments(idx + 1); % Start point of next interval
end
out(end, 2) = segments(end); % End point of last interval
out(:, diff(out, [], 2) == 0) = []; % Remove point intervals
E.g., for segments = [12 13 14 16 17 18], the output out = [12 14; 16 18] noting the gap between 14 and 16.
0 Kommentare
Akzeptierte Antwort
Dyuman Joshi
am 21 Dez. 2023
You can vectorize the code -
seg = [12 13 14 16 17 18 20 21 22 23 24];
idx = diff(seg)~=1;
out = [seg(1) seg([false idx]); seg([idx false]) seg(end)].'
4 Kommentare
Dyuman Joshi
am 24 Dez. 2023
Bearbeitet: Dyuman Joshi
am 24 Dez. 2023
Updated code -
seg = [12 13 14 16 17 18 20 21 22 23 24];
idx = diff(seg)~=1;
out = [seg([true idx]); seg([idx true])].'
Stephen23
am 24 Dez. 2023
Bearbeitet: Stephen23
am 24 Dez. 2023
"Is there a reason why the transpose is written as .' instead of just '?"
Because .' is transpose (even if beginners often use the complex conjugate transpose instead):
Using the correct operator has several benefits:
- it makes the intent clear
- it makes your code more generalized (assuming the rest of your algorithm can also handle complex numbers)
- it increases trust in your code
- it is the correct operator
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!