Simple Vector Indexing Question
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
Walter Roberson
2023-10-4
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"
采纳的回答
Star Strider
2023-10-4
编辑:Star Strider
2023-10-4
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 个评论
更多回答(1 个)
Voss
2023-10-4
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!