# How to split a vector in to sub vectors?

조회 수: 310 (최근 30일)
Jayanta Deb . 2017년 8월 16일
댓글: Pierre Mathieu . 2022년 10월 10일
I have a vector 'v' of size 8812x1,I want to split it into 20(or known length n) sub-vectors. eg. v = {1,2,3,...,8812}
I wish to see:
v1={1,2,3,...,20}
v2={21,22,23,...,41}
v3 = {42,43,44,...,62}
...
v20 = {...} % the last vector doesn't matter if it can have full 20 or not, it can / might get lesser number as its not fully possible to get a whole 20 elements divide equally with the size of the vector but obviously the vector v1 till v19 must have 20 elements.
Then I want to calculate the median from each sub divided vectors.
So it should be like m1 = median(v1), m2 = median(v2)... m20=median(v20)
I would appreciate if it is done with a loop
##### 댓글 수: 1표시 없음숨기기 없음
Stephen23 2017년 8월 16일
편집: Stephen23 님. 2022년 9월 8일
"I wish to see:"
v1 = {1,2,3,...,20}
v2 = {21,22,23,...,41}
v3 = {42,43,44,...,62}
DO NOT DO THIS.

댓글을 달려면 로그인하십시오.

### 채택된 답변

Stephen23 2017년 8월 16일
편집: Stephen23 님. 2017년 8월 16일
Simpler:
>> v = rand(8812,1);
>> b = 20; % block size
>> n = numel(v);
>> c = mat2cell(v,diff([0:b:n-1,n]));
>> z = cellfun(@median,c);
Or if you really want to use a loop, replace the last line with:
z = NaN(numel(c),1);
for k=1:numel(c)
z(k) = median(c{k});
end
##### 댓글 수: 2표시 이전 댓글 수: 1숨기기 이전 댓글 수: 1
Redouane Bouchou 2020년 6월 21일
thank you very much you are a genius

댓글을 달려면 로그인하십시오.

### 추가 답변 (2개)

José-Luis 2017년 8월 16일
v = rand(8812,1);
n = 20;
dummy = nan(20,ceil(numel(v)./n));
dummy(1:numel(v)) = v;
result = nanmedian(dummy)
##### 댓글 수: 2표시 이전 댓글 수: 1숨기기 이전 댓글 수: 1
Pierre Mathieu 2022년 10월 10일
Yes, very good!

댓글을 달려면 로그인하십시오.

ES 2017년 8월 16일
편집: ES 님. 2017년 8월 16일
v = [1:1:8812];
window_size = 20;
iCount = size(v,2);
iStartIDx = [1:window_size :iCount];
for iLoop=1:length(iStartIDx)-1
segment{iLoop} = v(iStartIDx(iLoop):iStartIDx(iLoop+1)-1);
med{iLoop} = median(segment{iLoop});
end
segment{iLoop+1} = v(iStartIDx(iLoop+1):end);
med{iLoop+1} = median(segment{iLoop+1});
##### 댓글 수: 3표시 이전 댓글 수: 2숨기기 이전 댓글 수: 2
José-Luis 2017년 8월 16일
편집: José-Luis 님. 2017년 8월 16일
This is rather wrong. On top of being incomplete, as pointed out by Jayanta:
There is no pre-allocation, a performance killer.
median is used both as a variable name and as a function. That's bound to be problematic.
Edit: latest comment was valid before answer being edited.

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!