有没有小列表长度的上限?如果有,您可以将b制成1000x5的矩阵,并使用nan
填充子数组中太短的间隙。然后,您可以使用numpy.any来获取所需的答案,类似于以下内容:
In [42]: a = np.array([1, 2, 3, 4])
...: b = np.array([[1, 2, 13], [2, 8, 9], [5, 6], [7]])
In [43]: bb = np.full((len(b), max(len(i) for i in b)), np.nan)
In [44]: for irow, row in enumerate(b):
...: bb[irow, :len(row)] = row
In [45]: bb
Out[45]:
array([[ 1., 2., 13.],
[ 2., 8., 9.],
[ 5., 6., nan],
[ 7., nan, nan]])
In [46]: a[:,np.newaxis] == bb
Out[46]:
array([[ True, False, False],
[ True, False, False],
[False, False, False],
[False, False, False]], dtype=bool)
In [47]: np.any(a[:,np.newaxis] == bb, axis=1)
Out[47]: array([ True, True, False, False], dtype=bool)
我不知道这是否对您的数据更快。
b
这样的数组:它只是一个对象类型的1D数组,而不是一个快速的NumPy 2D整数数组。请注意,在翻译过程中不要改变原文的含义。 - DSMa
和b
,并且b
的每个元素都有几个元素。 - Martín Fixman