Azzera filtri
Azzera filtri

How to repeat a row by a certain factor

2 visualizzazioni (ultimi 30 giorni)
I have this sample matrix:
A=[2 2 2; 3 3 3; 4 4 4];
I would like to multiply each row by a certain factor (in this specific case, the first by 2, the second by 1, and the third by 3) to generate:
A_New= 2 2 2 2 2 2 3 3 3 4 4 4 4 4 4 4 4 4
Does anyone have suggestions on how to do this? I tried:
B = repmat(A,[2 1 3],1)
but this created separate matrices.

Risposta accettata

Mohammad Abouali
Mohammad Abouali il 26 Apr 2015
Modificato: Mohammad Abouali il 26 Apr 2015
% Creating sample data
A=[2 2 2; 3 3 3; 4 4 4];
nRep=[2,1,3];
% Constructing A_New as instructed.
A_new=cell2mat(arrayfun(@(r) repmat(A(r,:),1,nRep(r)), ...
1:numel(nRep), ...
'UniformOutput',false));
% printing the results
fprintf('A=');
fprintf('%d ',A_new)
fprintf('\n');
Once you run it you get this:
A=2 2 2 2 2 2 3 3 3 4 4 4 4 4 4 4 4 4
  1 Commento
Mohammad Abouali
Mohammad Abouali il 26 Apr 2015
To preserve the structure then do this:
A=[2 2 2; 3 3 3; 4 4 4];
nRep=[2,1,3];
A_new=cell2mat( arrayfun(@(r) repmat(A(r,:),nRep(r),1),(1:numel(nRep))','UniformOutput',false) )
A_new =
2 2 2
2 2 2
3 3 3
4 4 4
4 4 4
4 4 4
If this is answering your question, please accept the answer by choosing the green button on top

Accedi per commentare.

Più risposte (1)

Jessica
Jessica il 26 Apr 2015
This is very helpful. Is there a way to preserve the structure so that it is in the format:
A_New=[2 2 2; 2 2 2; 3 3 3; 4 4 4; 4 4 4; 4 4 4];
Thanks!

Categorie

Scopri di più su Structures in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by