2

Let's say, I have: A=[1 2; 3 4];

I want to use repmat that return:

B = [1 1 2 2; 1 1 2 2; 3 3 4 4; 3 3 4 4]

Kindly need your help. Thank you

Luis Mendo
  • 110,752
  • 13
  • 76
  • 147

3 Answers3

4

I do not know a method using repmat but here is a method using kron

kron([1 2 ; 3 4],[1 1;1 1])

ans =

 1     1     2     2
 1     1     2     2
 3     3     4     4
 3     3     4     4
Nishant
  • 2,571
  • 1
  • 17
  • 29
0

An alternative which uses repmat is

A=[1 2; 3 4];
cell2mat(arrayfun(@(x)repmat(x,2,2),A,'UniformOutput',false))

ans =

 1     1     2     2
 1     1     2     2
 3     3     4     4
 3     3     4     4

arrayfun is used to evaluate each element in A using the anonymous function @(x)repmat(x,2,2) which replicates that single element into a 2x2 matrix.

The result of arrayfun is a 2x2 cell array where each element is a 2x2 matrix. We then convert this cell array into a matrix via cell2mat.

Geoff
  • 1,603
  • 11
  • 8
0

Let the data be defined as

A = [1 2; 3 4];
R = 2; %// number of repetitions of each row
C = 2; %// number of repetitions of each column. May be different from R

Two possible approaches are as follows:

  1. The simplest method is to use indexing:

    B = A(ceil(1/R:1/R:size(A,1)), ceil(1/C:1/C:size(A,2)));
    
  2. If you really want to do it with repmat, you need to play with dimensions using permute and reshape: move original dimensions 1, 2 to dimensions 2, 4 (permute); do the repetition along new dimensions 1, 3 (repmat); collapse dimensions 1, 2 into one dimension and 3, 4 into another dimension (reshape):

    [r c] = size(A);
    B = reshape(repmat(permute(A, [3 1 4 2]), [R 1 C 1]), [r*R c*C]);
    

Example result for R=2, C=3 (obtained with any of the two approaches):

B =
     1     1     1     2     2     2
     1     1     1     2     2     2
     3     3     3     4     4     4
     3     3     3     4     4     4
Luis Mendo
  • 110,752
  • 13
  • 76
  • 147