我正在寻找一种从大小为(nrows, ncols)的2D数据集中选择所有行的节奏式方法,这样我希望只保留那些所有值都在5%到95%百分位数之间的行。如果我们使用np.percentile(dataset, 5, axis=0),我们将获得一个大小为ncols的值数组。
在一维数组的情况下,编写类似于X[X>0]的东西是非常简单的。当你想推广到二维或更高的维度时,你的方法是什么?X[X>np.percentile(dataset, 5, axis=0)]
发布于 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示例:
# 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]])https://stackoverflow.com/questions/70815861
复制相似问题