Extract subvectors from a vector without using loops
显示 更早的评论
Hi, i'm trying to speed up my code and reduce loops in it. My problem is to extract some parts of a vector (original_vector) in new smaller vectors, or in a matrix where every columns is each one of those extracted vectors. So in a variable i have the original vector, and in an other one a "N x 2" matrix where in the first column is stored the start index of the "n-th" subvector to extract, and in the second one the end index of it. I need something faster to substitute the loop:
for k=1:(number_of_extractions) extracted(:,k)=original_vector(index(k,1):index(k,2)); end
P.S. every extracted vector as the same elements
Thanks!
2 个评论
Walter Roberson
2015-10-19
You refer to original_vector in your description but your code has two layers original(vector(range) ) ?
Niccoli Francesco
2015-10-19
采纳的回答
更多回答(1 个)
Guillaume
2015-10-19
original_vector = 1:100; %demo data
index = [2 15; 30 10; 40 20; 79 5]; %demo data
divisions = [index(:, 1), sum(index, 2)]';
divisions = diff([1; divisions(:); numel(original_vector)+1]); %calculate length of each block
subvectors = mat2cell(original_vector, 1, divisions); %this includes spacer blocks (of possible length 0 between each wanted block
subvectors = subvectors(2:2:end); %get rid of 'spacer blocks'
类别
在 帮助中心 和 File Exchange 中查找有关 Operators and Elementary Operations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!