File Exchange

image thumbnail


version 1.2 (4.38 KB) by

Concatenation of arbitrarily sized data along any dimension.



View License

CATPAD - concatenate matrices with different sizes by padding with NaN.

  M = CATPAD(dim,A1, A2, A3, ..., AN) concatenates along the dimension
      DIM the arrays A1 through AN into one large matrix. The vectors do
      not need to have the same size, nor number of dimensions. The size
      of the output M is determined by the dimmention of concatenation,
      and the size of the inputs. Any inputs that are not the correct
      size will be padded with NaNs if the inputs are numeric. If they
      are strings, they will be padded with a space " ".

  [M TF] = CATPAD(...,'padval',padval) pads the input data with the value
      specified by PADVAL. The default is NaN for numeric inputs, and a
      space " " for string inputs.

  [M TF] = CATPAD(...) outputs ana array of logicals TF having true
      values when the values in that position of M were from the original
      data (i.e. not padded).

     a = 1:4; b = 1:5; c = []; d = 1:3; dim = 1;
     M = catpad(dim,a,b,c,d)
     M =
         1 2 3 4 NaN
         1 2 3 4 5
         1 2 3 NaN NaN
     % Note: The input "c" was empty, and therefore doesn't require it's
          % own row.

     a = rand(3); b = magic(5); c = rand([4 5 4]); dim = 3;
     M = catpad(dim,a,b,c);
          5 5 6

     str1 = 'What do you think of this function?';
     str2 = 'I like it!';
     dim = 1;
     M = catpad(1,str1,str2)
     M =
          What do you think of this function?
          I like it!

  Example: Find original NaNs
      a = 1:3; b = [2:5 NaN]; c = [1 NaN]; dim = 1;
      [M,tf] = catpad(dim,a,b,c)
      % find the original NaN
      [row,col] = find(tf & isnan(M))
      % -> row = [3 2] , col = [2 5]

      a = 1:3; b = 1; c = 1:4; dim = 1; padval = inf;
      M = catpad(dim,a,b,c,'padval',padval)
      M =
             1 2 3 Inf
             1 Inf Inf Inf
             1 2 3 4


By Jonathan Sullian - October 2011

Many thanks to Michael Völker for his function sub2allind which has made
  this function possible. Also, I would like to aknowledge Jos (10584)
  whose submission padcat has inspired this one.

Comments and Ratings (11)

Hi, thanks a lot for your contribution! I am working with rather larger matrices and would like to change the output to uint16 instead of double. Is there a way for me to do it?

Thanks for this :)


Santhan Salai


This is really great work. Thanks for your kind contribution.

Dan K

Dan K (view profile)


Ivo (view profile)


I second Harold's sentiment.

Harold Bell

I just want to say that this function AWESOME.

Mike Sheppard

Mike Sheppard (view profile)



Expanded functionality to handle cell arrays.


Modified H1 line to more accurately reflect the functionality of the function.

MATLAB Release
MATLAB 7.12 (R2011a)

Inspired by: sub2allind, padcat(varargin)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video