当前位置: 首页 > 面试题库 >

Python numpy按条件过滤二维数组

万嘉石
2023-03-14
问题内容

这里的Python新手,我已阅读numpy数组的Filter行?和文档,但仍然不知道如何以python方式进行编码。

我有以下示例数组:(实际数据为50000 x 10)

a = numpy.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = ['a','c']

我需要找到所有行aa[:, 1] in filter。预期结果:

[[2,'a'],[4,'c']]

我当前的代码是这样的:

numpy.asarray([x for x in a if x[1] in filter ])

可以,但是我在某处读到它效率不高。什么是适当的numpy方法呢?

编辑:

感谢您提供所有正确答案!不幸的是,我只能将其中一个标记为可接受的答案。我很惊讶numpy.in1dGoogle搜索中没有出现numpy filter 2d array


问题答案:

您可以使用bool可以产生的索引数组np.in1d

您可以使用所需的np.ndarray任意值对a进行索引axis,例如使用bools数组来指示是否应包含元素。由于您要沿索引axis=0,这意味着您要从最远的索引中进行选择,因此需要具有1D,np.array其长度为行数。它的每个元素都将指示是否应包含该行。

一种快速的方法是np.in1d在的第二列上使用a。您可以通过获得该列的所有元素a[:, 1]。现在,您有了一个1D
np.array,应该根据您的过滤器检查其元素。那np.in1d是为了什么。

因此完整的代码如下所示:

import numpy as np

a = np.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = np.asarray(['a','c'])
a[np.in1d(a[:, 1], filter)]

或更长的形式:

import numpy as np

a = np.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = np.asarray(['a','c'])
mask = np.in1d(a[:, 1], filter)
a[mask]


 类似资料:
  • 问题内容: 我将如何创建一个按值过滤二维数组的函数? 给定以下数组: 我将如何过滤数组以仅显示键中包含特定值的那些数组?例如。 结果输出为: 编辑 我忘了提及搜索值应该是可互换的-即或。 问题答案: 将PHP的array_filter)函数与回调一起使用。 编辑:如果需要可互换,则可以稍微修改代码:

  • 本文向大家介绍PHP 二维数组和三维数组的过滤,包括了PHP 二维数组和三维数组的过滤的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 下面一段代码给大家介绍php三维数组变二维数组 关于PHP 二维数组和三维数组的过滤小编就给大家介绍这么多,希望对大家有所帮助!

  • 问题内容: 我有一个像这样的数组: 现在,我想按某种条件过滤该数组,只保留值等于2的元素,并删除值不等于2的所有元素。 所以我的预期结果数组将是: 注意:我想保留原始数组中的键。 如何使用PHP做到这一点?有内置功能吗? 问题答案:

  • 问题内容: 我有一系列元素。我还有一个IndexSet,它指定需要将数组的哪些索引提取到新数组中。例如: 我正在寻找使用swift 函数的方法,但是还没有答案。我怎样才能做到这一点? 问题答案: 是递增整数的集合,因此可以 将 每个索引 映射 到相应的数组元素: 假定所有索引对于给定数组均有效。如果不能保证,则可以过滤索引(如@dfri正确标记):

  • 问题内容: 如果我要搜索的主数组是,它将只将该数组过滤为。 这是我尝试过的: 它抛出 有什么建议? 问题答案: 使用来代替: 输出量 [“ Hello”,“ Halo”] 感谢@ user3441734指出,功能仅在您使用时才可用

  • 问题内容: 谁能向我解释为什么我对这两个表达式会得到不同的结果?我正在尝试在2个日期之间进行过滤: 结果:37M 与 结果:25M 它们有何不同?在我看来,他们应该产生相同的结果 问题答案: TL; DR 要传递多个条件或使用对象和逻辑运算符(,,)。请参见Pyspark:when子句中的多个条件。 您还可以使用 单个 SQL字符串: 实际上,在以下两者之间使用更有意义: 第一种方法甚至不是远程有

  • 问题内容: 是否可以对结果进行分组,然后按组中的行数进行过滤? 像这样: 问题答案: 您想使用HAVING来过滤聚合函数。

  • 问题内容: 我正在尝试使用Pandas在几个条件下进行布尔索引。我原来的DataFrame称为。如果执行以下操作,将得到预期的结果: 但是,如果我这样做(我认为应该是等效的),则不会返回任何行: 知道导致差异的原因是什么? 问题答案: 使用是因为运算符优先级: 或者,在单独的行上创建条件: 样品 :