gpt4 book ai didi

python - 超过两个参数的 Numpy `logical_or`

转载 作者:IT老高 更新时间:2023-10-28 21:42:09 25 4
gpt4 key购买 nike

Numpy 的 logical_or 函数最多需要两个数组进行比较。如何找到两个以上数组的并集? (关于 Numpy 的 logical_and 并获得两个以上数组的交集,可以提出同样的问题。)

最佳答案

如果您要询问 numpy.logical_or ,然后不,正如文档明确所说,唯一的参数是 x1, x2 ,以及可选的 out :

numpy.logical_or(x1, x2[, out]) = <ufunc 'logical_or'>


您当然可以将多个 logical_or 链接在一起像这样调用:

>>> x = np.array([True, True, False, False])
>>> y = np.array([True, False, True, False])
>>> z = np.array([False, False, False, False])
>>> np.logical_or(np.logical_or(x, y), z)
array([ True, True, True, False], dtype=bool)

在 NumPy 中概括这种链接的方法是使用 reduce :

>>> np.logical_or.reduce((x, y, z))
array([ True, True, True, False], dtype=bool)

当然,如果你有一个多维数组而不是单独的数组,这也可以工作——事实上,这就是它的 使用方式:

>>> xyz = np.array((x, y, z))
>>> xyz
array([[ True, True, False, False],
[ True, False, True, False],
[False, False, False, False]], dtype=bool)
>>> np.logical_or.reduce(xyz)
array([ True, True, True, False], dtype=bool)

但是三个等长一维数组的元组在 NumPy 术语中是 array_like,可以用作二维数组。


在 NumPy 之外,您还可以使用 Python 的 reduce :

>>> functools.reduce(np.logical_or, (x, y, z))
array([ True, True, True, False], dtype=bool)

然而,不像 NumPy 的 reduce , Python 不是经常需要的。在大多数情况下,有一种更简单的方法来做事——例如,将多个 Python or 链接在一起。运营商,不要 reduce超过 operator.or_ , 只需使用 any .当 没有 时,使用显式循环通常更具可读性。

事实上 NumPy 的 any 也可以用于这种情况,尽管它不是那么微不足道;如果你没有明确地给它一个轴,你最终会得到一个标量而不是一个数组。所以:

>>> np.any((x, y, z), axis=0)
array([ True, True, True, False], dtype=bool)

如您所料, logical_and 类似——你可以链接它,np.reduce它,functools.reduce它,或替代 all 带有明确的 axis .

其他操作呢,比如 logical_xor ?同样,同样的交易……除了在这种情况下没有 all/any -type 函数适用。 (你会怎么调用它?odd?)

关于python - 超过两个参数的 Numpy `logical_or`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528328/

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