gpt4 book ai didi

python - 如何根据多个条件从 numpy 数组中删除行?

转载 作者:太空狗 更新时间:2023-10-30 00:40:30 25 4
gpt4 key购买 nike

我有一个包含三列和数千行的文件。我想删除那些行,其第一列中的项目在一定范围内。比如我的文件中的数据是这样的:

18  6.215   0.025
19 6.203 0.025
20 6.200 0.025
21 6.205 0.025
22 6.201 0.026
23 6.197 0.026
24 6.188 0.024
25 6.187 0.023
26 6.189 0.021
27 6.188 0.020
28 6.192 0.019
29 6.185 0.020
30 6.189 0.019
31 6.191 0.018
32 6.188 0.019
33 6.187 0.019
34 6.194 0.021
35 6.192 0.024
36 6.193 0.024
37 6.187 0.026
38 6.184 0.026
39 6.183 0.027
40 6.189 0.027

我想删除那些第一项在 20 到 25 之间或 30 到 35 之间的行。因此预期输出是:

18  6.215   0.025
19 6.203 0.025
26 6.189 0.021
27 6.188 0.020
28 6.192 0.019
29 6.185 0.020
36 6.193 0.024
37 6.187 0.026
38 6.184 0.026
39 6.183 0.027
40 6.189 0.027

我该怎么做?

最佳答案

如果你想继续使用numpy ,解决方案并不难。

data = data[np.logical_not(np.logical_and(data[:,0] > 20, data[:,0] < 25))]
data = data[np.logical_not(np.logical_and(data[:,0] > 30, data[:,0] < 35))]

或者,如果您想将所有内容合并到一个语句中,

data = data[
np.logical_not(np.logical_or(
np.logical_and(data[:,0] > 20, data[:,0] < 25),
np.logical_and(data[:,0] > 30, data[:,0] < 35)
))
]

为了解释,条件语句如 data[:,0] < 25创建 bool 数组,逐个元素地跟踪数组中的条件为真或假。在这种情况下,它会告诉您第一列数据在哪里小于 25。

您还可以使用这些 bool 数组索引 numpy 数组。类似 data[data[:,0] > 30] 的语句提取 data[:,0] > 30 所在的所有行为真,或者第一个元素大于 30 的所有行。这种条件索引是您提取所需行(或列,或元素)的方式。

最后,我们需要逻辑工具来逐个元素地组合 bool 数组。常规and , or , 和 not语句不起作用,因为它们试图将 bool 数组作为一个整体组合在一起。幸运的是,numpy 提供了一组这样的工具,以 np.logical_and 的形式使用。 , np.logical_or , 和 np.logical_not .有了这些,我们可以按元素组合我们的 bool 数组,以找到满足更复杂条件的行。

关于python - 如何根据多个条件从 numpy 数组中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25380255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com