Expanding Cell Array using repmat with a loop

5 次查看(过去 30 天)
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"

采纳的回答

Image Analyst
Image Analyst 2017-9-5
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 个评论
Jorge Rodriguez
Jorge Rodriguez 2017-9-5
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 2017-9-5
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.

请先登录,再进行评论。

更多回答(1 个)

Andrei Bobrov
Andrei Bobrov 2017-9-5
编辑:Andrei Bobrov 2017-9-5
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);

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by