MATLAB Answers


how can I loop a repmat function over columns of matrix?

Asked by shaimaa zidan on 12 Sep 2019
Latest activity Answered by dpb
on 14 Sep 2019
I have 3 matrices v1,v2,v3 each matrix is (31 row *10 column) and a column vector w (31* 1).
I used this function to get (r11) which equal the repmat vector of values in vector (w) by values in the first column of matrix (v1).
for i=1:length(w);
r11=[r11 repmat(w(i),1,v1(i,1))];
could you help me to loop this function over each column in matrix (v1) ,then looping over each column in matrices (v2),(v3)?
thank you.

  1 Comment

What is the size and shape of the desired output?

Sign in to comment.

1 Answer

Answer by dpb
on 14 Sep 2019

Rereading, I guess it's just
r=cell2mat(arrayfun(@(v,w) repelem(v,w,1),v,repmat(w,1,3),'uni',0));
for each array v.
Naming variables with numeric subscripts makes difficult to write generic code; use a cell array or other structure over which can iterate programmatically instead. Or, the above solution would work if wrote
r=cell2mat(arrayfun(@(v,w) repelem(v,w,1),[v1 v2 v3],repmat(w,1,3),'uni',0));
Then the results would be in each of the three sets of 10 columns in the resulting array


Sign in to comment.