gpt4 book ai didi

使用 numpy 执行 elementwise "in"的 Pythonic 和有效方法

转载 作者:太空狗 更新时间:2023-10-29 17:48:58 25 4
gpt4 key购买 nike

我正在寻找一种有效获取 boolean 值数组的方法,其中给定两个大小相等的数组 ab,如果对应的每个元素都为真a 的元素出现在 in b 的相应元素中。

例如下面的程序:

a = numpy.array([1, 2, 3, 4])
b = numpy.array([[1, 2, 13], [2, 8, 9], [5, 6], [7]])
print(numpy.magic_function(a, b))

应该打印

[True, True, False, False]

记住这个函数应该等同于

[x in y for x, y in zip(a, b)]

只有 numpy - 针对 ab 很大的情况进行了优化,并且 b 的每个元素都是相当小。

最佳答案

利用 NumPy 的 broadcasting规则你应该首先使数组 b 平方,这可以使用 itertools.izip_longest 来实现:

from itertools import izip_longest

c = np.array(list(izip_longest(*b))).astype(float)

导致:

array([[  1.,   2.,   5.,   7.],
[ 2., 8., 6., nan],
[ 13., 9., nan, nan]])

然后,通过执行 np.isclose(c, a),您将获得一个二维 boolean 数组,显示每个 c[:, i] 之间的差异>a[i],根据广播规则,给出:

array([[ True,  True, False, False],
[False, False, False, False],
[False, False, False, False]], dtype=bool)

可用于获取您的答案:

np.any(np.isclose(c, a), axis=0)
#array([ True, True, False, False], dtype=bool)

关于使用 numpy 执行 elementwise "in"的 Pythonic 和有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618336/

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