I have a 3D array with the shape (9, 100, 7200)
. I want to remove the 2nd half of the 7200 values in every row so the new shape will be (9, 100, 3600)
.
What can I do to slice the array or delete the 2nd half of the indices? I was thinking np.delete(arr, [3601:7200], axis=2)
, but I get an invalid syntax error when using the colon.
CodePudding user response:
Why not just slicing?
arr = arr[:,:,:3600]
CodePudding user response:
The syntax error occurs because [3601:7200]
is not valid python. I assume you are trying to create a new array of numbers to pass as the obj
parameter for the delete function. You could do it this way using something like the range function:
np.delete(arr, range(3600,7200), axis=2)
keep in mind that this will not modify arr
, but it will return a new array with the elements deleted. Also, notice I have used 3600 not 3601.
However, its often better practice to use slicing in a problem like this:
arr[:,:,:3600]
This gives your required shape. Let me break this down a little. We are slicing a numpy array with 3 dimensions. Just putting a colon in means we are taking everything in that dimension. :3600
means we are taking the first 3600 elements in that dimension. A better way to think about deleting the last have, is to think of it as keeping the first half.