resize_array¶
- odl.util.numerics.resize_array(arr, newshp, offset=None, pad_mode='constant', pad_const=0, direction='forward', out=None)[source]¶
Return the resized version of
arr
with shapenewshp
.In axes where
newshp > arr.shape
, padding is applied according to the supplied options. Wherenewshp < arr.shape
, the array is cropped to the new size.See the online documentation on resizing operators for mathematical details.
- Parameters:
- arr
array-like
Array to be resized.
- newshpsequence of ints
Desired shape of the output array.
- offsetsequence of ints, optional
Specifies how many entries are added to/removed from the "left" side (corresponding to low indices) of
arr
.- pad_modestring, optional
Method to be used to fill in missing values in an enlarged array.
'constant'
: Fill withpad_const
.'symmetric'
: Reflect at the boundaries, not doubling the outmost values. This requires left and right padding sizes to be strictly smaller than the original array shape.'periodic'
: Fill in values from the other side, keeping the order. This requires left and right padding sizes to be at most as large as the original array shape.'order0'
: Extend constantly with the outmost values (ensures continuity).'order1'
: Extend with constant slope (ensures continuity of the first derivative). This requires at least 2 values along each axis where padding is applied.- pad_constscalar, optional
Value to be used in the
'constant'
padding mode.- direction{'forward', 'adjoint'}
Determines which variant of the resizing is applied.
'forward' : in axes where
out
is larger thanarr
, apply padding. Otherwise, restrict to the smaller size.'adjoint' : in axes where
out
is larger thanarr
, apply zero-padding. Otherwise, restrict to the smaller size and add the outside contributions according topad_mode
.- out
numpy.ndarray
, optional Array to write the result to. Must have shape
newshp
and be able to hold the data type of the input array.
- arr
- Returns:
- resized
numpy.ndarray
Resized array created according to the above rules. If
out
was given, the returned object is a reference to it.
- resized
Examples
The input can be shrunk by simply providing a smaller size. By default, values are removed from the right. When enlarging, zero-padding is applied by default, and the zeros are added to the right side. That behavior can be changed with the
offset
parameter:>>> from odl.util.numerics import resize_array >>> resize_array([1, 2, 3], (1,)) array([1]) >>> resize_array([1, 2, 3], (1,), offset=2) array([3]) >>> resize_array([1, 2, 3], (6,)) array([1, 2, 3, 0, 0, 0]) >>> resize_array([1, 2, 3], (7,), offset=2) array([0, 0, 1, 2, 3, 0, 0])
The padding constant can be changed, as well as the padding mode:
>>> resize_array([1, 2, 3], (7,), pad_const=-1, offset=2) array([-1, -1, 1, 2, 3, -1, -1]) >>> resize_array([1, 2, 3], (7,), pad_mode='periodic', offset=2) array([2, 3, 1, 2, 3, 1, 2]) >>> resize_array([1, 2, 3], (7,), pad_mode='symmetric', offset=2) array([3, 2, 1, 2, 3, 2, 1]) >>> resize_array([1, 2, 3], (7,), pad_mode='order0', offset=2) array([1, 1, 1, 2, 3, 3, 3]) >>> resize_array([1, 2, 3], (7,), pad_mode='order1', offset=2) array([-1, 0, 1, 2, 3, 4, 5])
Everything works for arbitrary number of dimensions:
>>> # Take the middle two columns and extend rows symmetrically >>> resize_array([[1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12]], ... (5, 2), pad_mode='symmetric', offset=[1, 1]) array([[ 6, 7], [ 2, 3], [ 6, 7], [10, 11], [ 6, 7]]) >>> # Take the rightmost two columns and extend rows symmetrically >>> # downwards >>> resize_array([[1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12]], (5, 2), pad_mode='symmetric', ... offset=[0, 2]) array([[ 3, 4], [ 7, 8], [11, 12], [ 7, 8], [ 3, 4]])