gpt4 book ai didi

python - 只获取与测试数组的所有元素匹配的数组元素?

转载 作者:行者123 更新时间:2023-12-01 05:23:33 25 4
gpt4 key购买 nike

如何才能只获取与测试数组的所有元素匹配的数组元素?例如,如果我有:

>>> import numpy as np

>>> arr = np.array([[0, 0, 1], [1, 0, 1], [1, 0, 1]])
>>> arr == [0,0,1]
array([[ True, True, True],
[False, True, True],
[False, True, True]], dtype=bool)

arr == [0,0,1]的解是索引0

最佳答案

您需要使用 axis 参数按行检查条件:

>>> (arr == np.array([0,0,1])).all(axis=1)
array([ True, False, False], dtype=bool)

如果您想要索引:

>>> np.where((arr == np.array([0,0,1])).all(axis=1))
(array([0]),)

我们还可以做一些巧妙(快速)的事情来防止从 np.all 调用 np.reduce:

>>> b = np.array([0,0,1])
>>> dt = np.dtype((np.void, arr.dtype.itemsize * arr.shape[1]))
>>> (arr.view(dt) == b.view(dt)).reshape(-1)
array([ True, False, False], dtype=bool)

一些时间安排:

arr = np.random.randint(0,2,(1E2,3))

%timeit (arr.view(dt) == b.view(dt)).reshape(-1)
100000 loops, best of 3: 7.76 µs per loop
%timeit (arr == b).all(axis=1)
100000 loops, best of 3: 13.5 µs per loop

对于更大的数组:

arr = np.random.randint(0,2,(1E5,3))

%timeit (arr.view(dt) == b.view(dt)).reshape(-1)
1 loops, best of 3: 221 ms per loop
%timeit (arr == b)).all(axis=1)
1 loops, best of 3: 315 ms per loop

关于python - 只获取与测试数组的所有元素匹配的数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21838505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com