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

搜索具有多个值的Numpy数组

葛昕
2023-03-14
问题内容

我有具有重复值的numpy 2d数组。

我正在搜索这样的数组。

In [104]: import numpy as np

In [105]: array = np.array

In [106]: a = array([[1, 2, 3],
     ...:            [1, 2, 3],
     ...:            [2, 5, 6],
     ...:            [3, 8, 9],
     ...:            [4, 8, 9],
     ...:            [4, 2, 3],
     ...:            [5, 2, 3])

In [107]: num_list = [1, 4, 5]

In [108]: for i in num_list :
     ...:     print(a[np.where(a[:,0] == num_list)])
     ...:
 [[1 2 3]
 [1 2 3]]
[[4 8 9]
 [4 2 3]]
[[5 2 3]]

输入是列表,其编号类似于列0的值。我想要的最终结果是任何形式的结果行,例如数组,列表或元组

array([[1, 2, 3],
       [1, 2, 3],
       [4, 8, 9],
       [4, 2, 3],
       [5, 2, 3]])

我的代码工作正常,但似乎不是pythonic。有没有更好的多值搜索策略?

就像a[np.where(a[:,0] == l)]只进行一次查找即可获取所有值的地方。

我的真实数组很大


问题答案:

方法1:
使用np.in1d-

a[np.in1d(a[:,0], num_list)]

方法2:
使用np.searchsorted-

num_arr = np.sort(num_list) # Sort num_list and get as array

# Get indices of occurrences of first column in num_list
idx = np.searchsorted(num_arr, a[:,0])

# Take care of out of bounds cases
idx[idx==len(num_arr)] = 0

out = a[a[:,0] == num_arr[idx]]


 类似资料:
  • 问题内容: 如果我有一个简单的集合,例如: 如果我要搜索含有维生素B6的水果,则可以执行以下操作: 这样一来,我便可以看到我收藏的所有含有维生素A的水果。但是,我如何能够搜索含有多种维生素(例如维生素B6和C)的水果?我不能简单地搜索,因为那样会寻找数组,而不是独立的字符串。 在Cloud Firestore中甚至有可能吗?如果没有,还有其他替代方法吗? 问题答案: 通过在查询中链接条件来寻找匹配

  • 在Cloud Firestore中这甚至是可能的吗?如果没有的话,有没有其他方法可以做到这一点?

  • 因此,为了提供搜索功能,我可以进行多个连接。我开始使用带有@query表示法的JPQL,但我必须对每个参数进行检查,结果一团糟。我开始研究其他选项,我看到了关于QueryDSL、标准和规范的东西,但我不确定我应该关注和学习哪一个。不幸的是,我不知道很多关于这个主题,我希望有人能指出我在正确的方向,以一个很好的实现这个搜索。谢谢!

  • 问题内容: 简单版本: 如果我这样做: 我得到的输出。但是我想。使用隐式numpy循环而不是自己遍历它,是否可能以某种方式实现? 我实际上需要做什么的版本: 我有一个结构化的数组,其中包含一个索引,一个值和一些布尔值。我想根据布尔值对那些索引处的值求和。显然,这可以通过一个简单的循环来完成,但是似乎可以通过聪明的numpy索引来实现(如上所述)。 例如,我有一个包含5个元素的数组,要从数组中填充值

  • 我尝试在数据帧“df_energy”中添加一个新的列“energy_class”,如果“consumpion_energy”值为 有什么办法可以帮我吗? 先谢谢你

  • 问题内容: 当我尝试仅获取像这样的数组的第一个元素时 我得到这个错误 我想找到一种在仍然使用切片的情况下执行此操作的方法,因为完整的代码会打开,并使用两列(从1到N之间不等)的所有列读取许多不同的文件。 问题答案: 您的数组只有 一个 维度:其形状为。然而,你的切片 指定选择 2米 的尺寸。这导致NumPy引发错误。 要从中获取第一个元素,只需编写即可(此处仅选择一个维度)。 看另一个问题,如果您