Repeat matrix columns in pairs.

5 visualizzazioni (ultimi 30 giorni)
Santos García Rosado
Santos García Rosado il 22 Apr 2021
Risposto: Wolfgang il 24 Giu 2022
Hello,
I'm trying to use the repelem function to repeat some columns of a matrix A like:
A = [1 2 3 4; 5 6 7 8];
If I use the repelem function I'll get the following output:
out = repelem(A,1,2);
out =
[1 1 2 2 3 3 4 4 ; 5 5 6 6 7 7 8 8]
However I'm trying to repeat two columns at the same time instead of doing it individually. So that I get an output like:
Output = [1 2 1 2 3 4 3 4; 5 6 5 6 7 8 7 8]
Anyone can come around a solution to this problem?
Thank you,
Santos

Risposta accettata

David Hill
David Hill il 22 Apr 2021
out=[repmat(A(:,1:2),1,2),repmat(A(:,3:4),1,2)];
  5 Commenti
David Hill
David Hill il 22 Apr 2021
You could reshape, not sure it will be any faster.
out=reshape(repelem(reshape(A',2,[]),1,2),2*size(A,2),[])';
Santos García Rosado
Santos García Rosado il 23 Apr 2021
I'll take a good look at it. Thank you David.

Accedi per commentare.

Più risposte (1)

Wolfgang
Wolfgang il 24 Giu 2022
Here is a more generalized solution which duplicates pairs of columns and doesn't depend on the number of columns, however the number of columns in A has to be even.
B = reshape(kron(ones(2,1), reshape(A, 2*size(A,1), [])), size(A,1), []);
This also allows to triplicate pairs of columns by using:
B = reshape(kron(ones(3,1), reshape(A, 2*size(A,1), [])), size(A,1), []);
Or you can triplicate triples of columns (number of columns in A must be a multiple of 3):
B = reshape(kron(ones(3,1), reshape(A, 3*size(A,1), [])), size(A,1), []);
Also possible: duplicate triples of columns:
B = reshape(kron(ones(2,1), reshape(A, 3*size(A,1), [])), size(A,1), []);
And so on ...

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by