Borrar filtros
Borrar filtros

Expanding Cell Array using repmat with a loop

5 visualizaciones (últimos 30 días)
Jorge Rodriguez
Jorge Rodriguez el 5 de Sept. de 2017
Comentada: Image Analyst el 5 de Sept. de 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"

Respuesta aceptada

Image Analyst
Image Analyst el 5 de Sept. de 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 comentarios
Jorge Rodriguez
Jorge Rodriguez el 5 de Sept. de 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 el 5 de Sept. de 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.

Iniciar sesión para comentar.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 5 de Sept. de 2017
Editada: Andrei Bobrov el 5 de Sept. de 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);

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by