Python 基于一维条件删除数据阵列中的元素

Python 基于一维条件删除数据阵列中的元素,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,在Numpy数组中,如何根据不同维度中的条件删除维度中的元素 我有: [[[1 3] [1 4]] [[2 6] [2 8]] [[3 5] [3 5]]] 我想根据条件x[:,:,1]

在Numpy数组中,如何根据不同维度中的条件删除维度中的元素

我有:

[[[1 3]
  [1 4]]

 [[2 6]
  [2 8]]

 [[3 5]
  [3 5]]]
我想根据条件x[:,:,1]<7删除

所需输出[:,1,:]已删除:

编辑:固定打字错误

这可能有效:

x[np.where(np.all(x[..., 1] < 7, axis=1)), ...]
您确实获得了一个额外的维度,但很容易删除:

np.squeeze(x[np.where(np.all(x[..., 1] < 7, axis=1)), ...])
简要介绍其工作原理:

首先是条件:x[…,1]<7。 然后测试该条件是否对特定轴上的所有元素有效:np.allx[…,1]<7,轴=1。 然后,使用where来获取索引,而不是布尔数组:np.wherenp.allx[…,1]<7,axis=1。 并将这些索引插入相关维度:x[np.其中np.allx[…,1]<7,axis=1,…]。

这可能适用于:

x[np.where(np.all(x[..., 1] < 7, axis=1)), ...]
您确实获得了一个额外的维度,但很容易删除:

np.squeeze(x[np.where(np.all(x[..., 1] < 7, axis=1)), ...])
简要介绍其工作原理:

首先是条件:x[…,1]<7。 然后测试该条件是否对特定轴上的所有元素有效:np.allx[…,1]<7,轴=1。 然后,使用where来获取索引,而不是布尔数组:np.wherenp.allx[…,1]<7,axis=1。
然后将这些索引插入到相关维度中:x[np.其中np.allx[…,1]<7,axis=1,…]。

作为所需的输出,在axis=0上过滤x。因此,你可以这样尝试

m = (x[:,:,1] < 7).all(1)
x_out = x[m,:,:]

作为所需的输出,在轴=0上过滤x。因此,你可以这样尝试

m = (x[:,:,1] < 7).all(1)
x_out = x[m,:,:]

我不知道如何将您的条件连接到所需的输出:只有一个元素小于7。这是否意味着第二维度被完全移除?你是说x[:,:,1]<7?因为您的示例具有所有真实条件。是的,x[:,:,1]<7。打字错误固定的谢谢。你是说[1,:,:]被删除了吗?我不知道如何将你的条件连接到你想要的输出:只有一个元素小于7。这是否意味着第二维度被完全移除?你是说x[:,:,1]<7?因为您的示例具有所有真实条件。是的,x[:,:,1]<7。打字错误固定的谢谢。你是说[1,:,:]被删除了吗?