There is an ndarray data
with shape, e.g., (5, 10, 2)
; and other two lists, x1
and x2
. Both of size 10
. I want select subset from data
based on the following conditions,
Across the second dimension
If x1[i]<= data[j, i,0] <=x2[i], then we will select data[j, i,:]
I tried selected = data[x1<=data[:,:,0]<=x2]
. It does not work. I am not clear what's the efficient (or vectorized) way to implement this condition-based selection.
CodePudding user response:
The code below selects all values in data
where the third dimension is 0 (i.e. each value has some index data[i, j, 0]
and where the value is <= than the corresponding x2
and >= than the corresponding x1
:
idx = np.where(np.logical_and(data[:, :, 0] >= np.array(x1), data[:, :, 0] <= np.array(x2)))
# data[idx] contains the full rows of length 2 rather than just the 0th column, so we need to select the 0th column.
selected = data[idx][:, 0]
The code assumes that x1
and x2
are lists with lengths equal to the size of data
's second dimension (in this case, 10). Note that the code only returns the values, not the indices of the values.
Let me know if you have any questions.