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!