-
-
Save gazzar/10240865 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
def rebin(a, new_shape): | |
""" | |
Resizes a 2d array by averaging or repeating elements, | |
new dimensions must be integral factors of original dimensions | |
Parameters | |
---------- | |
a : array_like | |
Input array. | |
new_shape : tuple of int | |
Shape of the output array | |
Returns | |
------- | |
rebinned_array : ndarray | |
If the new shape is smaller of the input array, the data are averaged, | |
if the new shape is bigger array elements are repeated | |
See Also | |
-------- | |
resize : Return a new array with the specified shape. | |
Examples | |
-------- | |
>>> a = np.array([[0, 1], [2, 3]]) | |
>>> b = rebin(a, (4, 6)) #upsize | |
>>> b | |
array([[0, 0, 0, 1, 1, 1], | |
[0, 0, 0, 1, 1, 1], | |
[2, 2, 2, 3, 3, 3], | |
[2, 2, 2, 3, 3, 3]]) | |
>>> c = rebin(b, (2, 3)) #downsize | |
>>> c | |
array([[ 0. , 0.5, 1. ], | |
[ 2. , 2.5, 3. ]]) | |
""" | |
M, N = a.shape | |
m, n = new_shape | |
if m<M: | |
return a.reshape((m,M/m,n,N/n)).mean(3).mean(1) | |
else: | |
return np.repeat(np.repeat(a, m/M, axis=0), n/N, axis=1) | |
if __name__ == '__main__': | |
import doctest | |
doctest.testmod() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment