检查NumPy数组中值是否存在的最有效方法是什么?

97 投票
8 回答
257567 浏览
提问于 2025-04-16 23:45

我有一个非常大的NumPy数组

1 40 3
4 50 4
5 60 7
5 49 6
6 70 8
8 80 9
8 72 1
9 90 7
.... 

我想检查一下这个数组的第一列中是否存在某个值。我有一些自己想出来的方法(比如逐行检查),但是考虑到数组的大小,我想找一个更高效的方法。

谢谢!

8 个回答

49

要检查多个值,你可以使用numpy.in1d()这个函数,它的作用类似于Python中的关键字in,不过它是逐个元素进行检查的。如果你的数据是排好序的,可以使用numpy.searchsorted()这个函数:

import numpy as np
data = np.array([1,4,5,5,6,8,8,9])
values = [2,3,4,6,7]
print np.in1d(values, data)

index = np.searchsorted(data, values)
print data[index] == values
65

对我来说,最明显的就是:

np.any(my_array[:, 0] == value)
110

怎么样呢

if value in my_array[:, col_num]:
    do_whatever

补充:我觉得 __contains__ 的实现方式和 @detly 的版本是一样的

撰写回答