]> Creatis software - CreaPhase.git/blob - octave_packages/dataframe-0.9.1/@dataframe/repmat.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / dataframe-0.9.1 / @dataframe / repmat.m
1 function resu = repmat(df, varargin) 
2
3   %% Copyright (C) 2009-2012 Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
4   %%
5   %% This file is part of Octave.
6   %%
7   %% Octave is free software; you can redistribute it and/or
8   %% modify it under the terms of the GNU General Public
9   %% License as published by the Free Software Foundation;
10   %% either version 2, or (at your option) any later version.
11   %%
12   %% Octave is distributed in the hope that it will be useful,
13   %% but WITHOUT ANY WARRANTY; without even the implied
14   %% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15   %% PURPOSE.  See the GNU General Public License for more
16   %% details.
17   %%
18   %% You should have received a copy of the GNU General Public
19   %% License along with Octave; see the file COPYING.  If not,
20   %% write to the Free Software Foundation, 51 Franklin Street -
21   %% Fifth Floor, Boston, MA 02110-1301, USA.
22
23   %#
24   %# $Id: repmat.m 9585 2012-02-05 15:32:46Z cdemills $
25   %#
26
27   resu = df; idx = horzcat(varargin{:});
28   %# for the second dim, use either 1 either the 3rd one
29   dummy = idx;
30   if (length(dummy) > 2), 
31     dummy(2) = []; 
32   else
33     dummy(2) = 1;
34   endif
35   %# operate on first  dim 
36   if (idx(1) > 1),
37     resu = df_mapper(@repmat, df, [idx(1) 1]);
38     if (!isempty(df._name{1})),
39       resu._name{1} = feval(@repmat, df._name{1}, [idx(1) 1]);
40       resu._over{1} = feval(@repmat, df._over{1}, [idx(1) 1]);
41     endif
42     resu._cnt(1) = resu._cnt(1) * idx(1);
43   endif
44
45   if (dummy(2) > 1),
46     for indi = 1:resu._cnt(2),
47       resu._rep{indi} = feval(@repmat, resu._rep{indi}, [1 dummy(2)]);
48     endfor
49   endif
50
51   %# operate on ridx 
52   resu._ridx = feval(@repmat, resu._ridx, idx);
53   
54   %# operate on second dim
55   if (length(idx) > 1 && idx(2) > 1),
56     resu._data    = feval(@repmat, resu._data, [1 idx(2)]); 
57     resu._name{2} = feval(@repmat, df._name{2}, [idx(2) 1]);
58     resu._over{2} = feval(@repmat, df._over{2}, [1 idx(2)]);
59     resu._type    = feval(@repmat, df._type, [1 idx(2)]);
60     resu._cnt(2)  = resu._cnt(2) * idx(2);
61   endif
62
63   resu = df_thirddim(resu);
64
65 endfunction