Simple Vector Indexing Question
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Emma Walker
am 4 Okt. 2023
Beantwortet: Voss
am 4 Okt. 2023
Say I have a vector called Vector that is roughly a 6000x50 double.
I want to pull out certain indexes from that double, deleting the rows that are not in the following start - stop table, like this:
Random Example below:
Start Stop
540 1238
1423 2144
2403 3280
3485 4385
4573 5152
So I want all the data from rows 540 -1238, rows 1423-2144, 2403-3280, 3485-4385, and 4573-5152. I want to delete the rows before 540, after 5152, and in between these windows (i.e. 1238 to 1434).
There must be a simple way to do this, I have been making it way too complicated.
activeVector = Vector ([540:1238]; [1423:2144]; ... etc.
Please let me know if you can help!
1 Kommentar
Walter Roberson
am 4 Okt. 2023
In MATLAB terminology, "vector" is always 1 x something or something x 1. Something that is 6000 x 50 would be called either a "matrix" or an "array"
Akzeptierte Antwort
Star Strider
am 4 Okt. 2023
Bearbeitet: Star Strider
am 4 Okt. 2023
Put all the indices inside one set of square brackets —
Vector = 1:20;
activeVector = Vector([3:7 10:15])
This is a simplified version of what you want to do.
EDIT — (4 Oct 2023 at 17:52)
To delete rows from a matrix, this works similarly —
Matrix = Vector(:)*ones(1,10)
activeMatrix = Matrix([3:7 10:15],:)
.
0 Kommentare
Weitere Antworten (1)
Voss
am 4 Okt. 2023
M = rand(6000,5);
rows = [
540 1238
1423 2144
2403 3280
3485 4385
4573 5152];
idx = arrayfun(@colon,rows(:,1),rows(:,2),'UniformOutput',false);
M = M([idx{:}],:);
0 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing 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!