I have a 800x800 array and I want to analize just the elements in the outter part of it. I need a new array without the elements of the slice [5:-5,5:-5]. It doesn't necessarily have to return a 2d array, a flat array or a list will do as well. Example:
import numpy
>>> a = numpy.arange(1,10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.shape = (3,3)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
I need to discard the core elements, something like:
del a[1:2,1:2]
I expect to have:
array([1, 2, 3, 4, 6, 7, 8, 9])
I tried to use numpy.delete() but it seems to work for one axis at a time. I wonder if there is a more straight forward way to do this.
To delete a row or column in a 2D array, right-click the array row or column and select Data Operations»Delete Row or Delete Column. You also can programmatically delete elements, rows, columns, and pages within arrays.
To delete a 2D ordinary array, just let it go out of scope. If the 2D array is in free store, then it must be deleted with the delete[] operator to free memory in the scope in which it is declared.
Python pop() method The pop() method removes an element from the list based on the index given.
You can use a boolean array to index your array any way you like. That way you don't have to change any values in your original array if you don't want to. Here is a simple example:
>>> import numpy as np
>>> a = np.arange(1,10).reshape(3,3)
>>> b = a.astype(bool)
>>> b[1:2,1:2] = False
>>> b
array([[ True, True, True],
[ True, False, True],
[ True, True, True]], dtype=bool)
>>> a[b]
array([1, 2, 3, 4, 6, 7, 8, 9])
You can replace the middle region with some placeholder value (I used -12345, anything that can't occur in your actual data would work), then select everything that is not equal to that value:
>>> import numpy as np
>>> a = np.arange(1,26)
>>> a.shape = (5,5)
>>> a
array([[ 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]])
>>> a[1:4,1:4] = -12345
>>> a
array([[ 1, 2, 3, 4, 5],
[ 6, -12345, -12345, -12345, 10],
[ 11, -12345, -12345, -12345, 15],
[ 16, -12345, -12345, -12345, 20],
[ 21, 22, 23, 24, 25]])
>>> a[a != -12345]
array([ 1, 2, 3, 4, 5, 6, 10, 11, 15, 16, 20, 21, 22, 23, 24, 25])
If you use a float array rather than an integer array, you can do it a little more elegantly by using NaN and isfinite:
>>> a = np.arange(1,26).astype('float32')
>>> a.shape = (5,5)
>>> a[1:4,1:4] = np.nan
>>> a
array([[ 1., 2., 3., 4., 5.],
[ 6., nan, nan, nan, 10.],
[ 11., nan, nan, nan, 15.],
[ 16., nan, nan, nan, 20.],
[ 21., 22., 23., 24., 25.]], dtype=float32)
>>> a[np.isfinite(a)]
array([ 1., 2., 3., 4., 5., 6., 10., 11., 15., 16., 20.,
21., 22., 23., 24., 25.], dtype=float32)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With