diff options
Diffstat (limited to 'macros/prepad.sci')
-rw-r--r-- | macros/prepad.sci | 118 |
1 files changed, 50 insertions, 68 deletions
diff --git a/macros/prepad.sci b/macros/prepad.sci index 4e517f8..d3595bf 100644 --- a/macros/prepad.sci +++ b/macros/prepad.sci @@ -1,83 +1,65 @@ // Copyright (C) 2018 - IIT Bombay - FOSSEE -// // This file must be used under the terms of the CeCILL. // This source file is licensed as described in the file COPYING, which // you should have received as part of this distribution. The terms // are also available at // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author:[insert name] +// Author: Abinash Singh Under FOSSEE Internship +// Modifieded by: Abinash Singh Under FOSSEE Internship +// Last Modified on : 3 Feb 2024 // Organization: FOSSEE, IIT Bombay // Email: toolbox@scilab.in +/* +Calling Sequence : + prepad (x, l) + prepad (x, l, c) + prepad (x, l, c, dim) - -function y = prepad (x, l, c, dim) -// Calling sequence: -// y= prepad (x, l) -// y= prepad (x, l, c) -// y= prepad (x, l, c, dim) -// Prepend the scalar value c to the vector x until it is of length -// l. If c is not given, a value of 0 is used. -// -// If length (x) > l, elements from the beginning of x -// are removed until a vector of length l is obtained. -// -// If x is a matrix, elements are prepended or removed from each row. -// -// If the optional argument dim is given, operate along this dimension. -// -// If dim is larger than the dimensions of x, the result will have -// dim dimensions. - -//Test cases: -//prepad ([1,2], 4,0,2) -//Output: [0,0,1,2] - - -[nargout,nargin]=argn(); - if (nargin < 2 | nargin > 4) - error("wrong number of input arguments"); - end - - if (nargin < 3 | isempty (c)) - c = 0; - else - if (~ isscalar (c)) - error ("prepad: pad value C must be empty or a scalar"); +Prepend the scalar value c to the vector x until it is of length l. If c is not given, a value of 0 is used. +If length (x) > l, elements from the beginning of x are removed until a vector of length l is obtained. +If x is a matrix, elements are prepended or removed from each row. +If the optional argument dim is given, operate along this dimension. +If dim is larger than the dimensions of x, the result will have dim dimensions. +*/ +function res = prepad(x,l,c,dim) + if nargin < 2 then + error("Usage : postpad(x,l,c(optional),dim(optional))") end - end -//dim=1; - nd = ndims (x); - sz = size (x); - if (argn(2) < 4) - // Find the first non-singleton dimension. - dim = find (sz > 1, 1) - if (dim == []) - dim = 1 + if nargin < 3 then + c = 0 ; end - else - if (~(isscalar (dim) & dim == fix (dim) & dim >= 1)) - error ("prepad: DIM must be an integer and a valid dimension"); + if nargin < 4 then + dim = find(size(x)>1) + if isempty(dim) then dim = 2 end + if isvector(dim) then dim = dim(1) end end - end - - if (~ isscalar (l) | l < 0) - error ("prepad: length L must be a positive scalar"); - end - if (dim > nd) - sz(nd+1:dim) = 1; - end - - d = sz(dim); + if l < size(x,dim) then + if isvector(x) then + start = length(x) - l+1; + res=x(start:$) + return; + else + error("prepad : l must be greter than dim size for matrices") + end + + end + + if dim == 1 then + res = [ c* ones( l - size(x,1) , size(x,2)) ; x] + elseif dim == 2 then + res = [ c* ones( size(x,1) , l - size(x,2)) x] + else + error("prepad : Invalid value for arg dim 1 or 2 expected") + end +endfunction - if (d >= l) -// idx = repmat ({':'}, nd, 1); -// idx(dim) = (d-l+1) : d; -// y = x(idx(:)); - y=x; - else - sz(dim) = l - d; - y = cat (dim, c(ones (sz(1),sz(2))), x); - end +/* +#test for row vectors +prepad([1 2 3 4],6) +prepad([1 ;2 ;3 ;4],6) +prepad([1 2 3 4;5 6 7 8;9 10 11 12],6) +prepad([1 2 ;3 4;5 6],6,-1) -endfunction +// FIXME : Tests for 2d and high dimesnsional matrices +*/ |