首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于一维条件删除ndarray中的元素

基于一维条件删除ndarray中的元素
EN

Stack Overflow用户
提问于 2020-03-28 01:06:29
回答 2查看 148关注 0票数 1

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

我有:

代码语言:javascript
复制
[[[1 3]
  [1 4]]

 [[2 6]
  [2 8]]

 [[3 5]
  [3 5]]]

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

期望输出([:,1,:]删除):

代码语言:javascript
复制
[[[1 3]
  [1 4]]

 [[3 5]
  [3 5]]]

编辑:固定排版

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-28 01:58:00

作为您想要的输出,您可以在x上过滤axis=0。因此,你可以试试这个方法。

代码语言:javascript
复制
m = (x[:,:,1] < 7).all(1)
x_out = x[m,:,:]

或者简单的

代码语言:javascript
复制
x_out = x[m]   

Out[70]:
array([[[1, 3],
        [1, 4]],

       [[3, 5],
        [3, 5]]])
票数 1
EN

Stack Overflow用户

发布于 2020-03-28 01:19:54

这样做可能会奏效:

代码语言:javascript
复制
x[np.where(np.all(x[..., 1] < 7, axis=1)), ...]

收益率

代码语言:javascript
复制
array([[[[1, 3],
         [1, 4]],

        [[3, 5],
         [3, 5]]]])

您确实获得了额外的维度,但这很容易删除:

代码语言:javascript
复制
np.squeeze(x[np.where(np.all(x[..., 1] < 7, axis=1)), ...])

简单地说,它是如何工作的:

首先是条件:x[..., 1] < 7

然后测试条件是否对特定轴上的所有元素有效:np.all(x[..., 1] < 7, axis=1)

然后,使用where来获取索引,而不是一组布尔值:np.where(np.all(x[..., 1] < 7, axis=1))

并将这些索引插入相关维度:x[np.where(np.all(x[..., 1] < 7, axis=1)), ...]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60896121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档