1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
// 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]
// Organization: FOSSEE, IIT Bombay
// Email: toolbox@scilab.in
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");
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)) | (dim == 1);
else
if (~(isscalar (dim) & dim == fix (dim) & dim >= 1))
error ("prepad: DIM must be an integer and a valid dimension");
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 (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
endfunction
|