繁体   English   中英

检查一维 numpy 数组的每个元素是否在二维 numpy 数组的对应行中

[英]Check if each element of 1-D numpy array is in corresponding row of 2-D numpy array

我有两个数组:

X = np.array([[3, 4, 1], [2, 3, 4], [3, 5, 1]]) 
v = np.array([1, 5, 3])

我想检查 v 是否在 X 元素中,即 1 在 [3, 4, 1] 中,5 在 [2, 3, 4] 中,3 在 [3, 5, 1] 中并返回1 和 0。所以,在这种情况下,我的答案应该是 [1,0,1]。

谢谢

为 v 创建新轴:

>>> np.any(X - v[:, np.newaxis] == 0, axis=1) * 1
array([1, 0, 1])

numpy.newaxis :newaxis 对象可用于所有切片操作以创建长度为 1 的轴。 newaxis 是 'None' 的别名,可以使用 'None' 代替它,结果相同。

表现

X = np.random.randint(100, 1000, (100000, 1000))
v = np.random.randint(100, 1000, 100000)

%timeit np.any(X - v[:, np.newaxis] == 0, axis=1) * 1
880 ms ± 110 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

我不太了解 NumPy 来使用array对象,但我已经创建了一个可以与普通列表一起使用的函数:

def check_correspondence(lists, numbers):
    for i in range(len(lists)):
        yield int(numbers[i] in lists[i])

每当您调用check_correspondence ,您都需要将其转换为列表或元组,因为它是一个生成器。 无论如何,它可以修改为接受numpy.array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM