Expanding Cell Array using repmat with a loop

1 Ansicht (letzte 30 Tage)
Jorge Rodriguez
Jorge Rodriguez am 5 Sep. 2017
Kommentiert: Image Analyst am 5 Sep. 2017
Hello Community, I'm trying to expand a column vector A([4,5,9,8],1) by using different sizes hold in a vector B([40,10,20,70],1) and creating a vector C([4,4,4...40x,5,5,5...10x,9,9,9...20x,8,8,8,...70x],1). I'm tryig to achieve this by using a loop and repmat.
clc
A=[4;5;9;8];
B=[40;10;20;70];
R=0;
k=size(A,1);
for h=1:k
C(R+1,1)=repmat(A(h,1),B(h,1),1);
R=B(h,1);
end
The error message shows: "Assignment has more non-singleton rhs dimensions than non-singleton subscripts"

Akzeptierte Antwort

Image Analyst
Image Analyst am 5 Sep. 2017
You need to use braces with C since it's a cell array. And C must be a cell array since it will have different numbers of elements in each element of A and B.
clc
A=[4;5;9;8];
B=[40;10;20;70];
for k = 1 : length(A)
C{k} = repmat(A(k),[1, B(k)]);
end
celldisp(C)
  2 Kommentare
Jorge Rodriguez
Jorge Rodriguez am 5 Sep. 2017
thanks for the help, it moves me forward in the solution I'm looking for. But I need that the cell array C be a continuous array with the values of A continuous, in other words one column for C with values 4,4,4,4....5,5,5,5.....,9,9,9,9.....,8,8,8,8,8.... so the lenght of vector C should be (140,1)
Image Analyst
Image Analyst am 5 Sep. 2017
Sorry, your terminology where you had arrays inside your C "C([4,4,4...40x,5,5,5...10x,9,9,9...20x,8,8,8,...70x],1)" threw me. So just use repelem() like Walter and Andrei told you.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Andrei Bobrov
Andrei Bobrov am 5 Sep. 2017
Bearbeitet: Andrei Bobrov am 5 Sep. 2017
with loop for..end
A=[4;5;9;8];
B=[40;10;20;70];
n = cumsum(B);
m = n - B + 1;
k = size(B,1);
C = zeros(n(end),1);
for h=1:k
C(m(h):n(h),1)=repmat(A(h),B(h),1);
end
without loop
A = [4;5;9;8];
B = [40;10;20;70];
n = cumsum(B);
m = n - B + 1;
ii = zeros(n(end),1);
ii(m) = 1;
C = A(cumsum(ii));
or just
C = repelem(A,B);

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by