首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy删除值在5%至95%之间的所有行

Numpy删除值在5%至95%之间的所有行
EN

Stack Overflow用户
提问于 2022-01-22 18:29:33
回答 1查看 64关注 0票数 0

我正在寻找一种从大小为(nrows, ncols)的2D数据集中选择所有行的节奏式方法,这样我希望只保留那些所有值都在5%到95%百分位数之间的行。如果我们使用np.percentile(dataset, 5, axis=0),我们将获得一个大小为ncols的值数组。

在一维数组的情况下,编写类似于X[X>0]的东西是非常简单的。当你想推广到二维或更高的维度时,你的方法是什么?X[X>np.percentile(dataset, 5, axis=0)]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 19:26:40

如果在2D示例中正确理解,就可以使用np.all()查找符合条件的行。然后您可以使用类似于X[X>0]的语法(参见下面的示例)。

我不知道如何推广到更高的维度,但也许np.take (https://numpy.org/doc/stable/reference/generated/numpy.take.html)就是你想要的?

2D示例:

代码语言:javascript
复制
# Setup
import numpy as np
np.random.seed(100)
dataset = np.random.normal(size=(10,2))
display(dataset)

array([[-1.74976547,  0.3426804 ],
       [ 1.1530358 , -0.25243604],
       [ 0.98132079,  0.51421884],
       [ 0.22117967, -1.07004333],
       [-0.18949583,  0.25500144],
       [-0.45802699,  0.43516349],
       [-0.58359505,  0.81684707],
       [ 0.67272081, -0.10441114],
       [-0.53128038,  1.02973269],
       [-0.43813562, -1.11831825]])

# Indexing
lo = np.percentile(dataset, 5, axis=0)
hi = np.percentile(dataset, 95, axis=0)
idx = (lo < data) & (hi > data) # turns into a 1d index

dataset[np.all(idx, axis=1)]

array([[-1.74976547,  0.3426804 ],
       [ 1.1530358 , -0.25243604],
       [-0.45802699,  0.43516349],
       [ 0.67272081, -0.10441114],
       [-0.53128038,  1.02973269]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70815861

复制
相关文章

相似问题

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