开发者社区 问答 正文

多个逻辑参数的Numpy`logical_or`

Numpy的logical_or函数只需要两个数组即可进行比较。如何找到两个以上数组的并集?(关于Numpy's logical_and并获得两个以上数组的交集,可能会问相同的问题。) 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 20:13:28 1188 分享 版权
1 条回答
写回答
取消 提交回答
  • 如果您要询问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) 但是,三个等长的1D数组的元组在NumPy方面类似于array_,并且可以用作2D数组。

    在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替换。allaxis

    那么其他操作logical_xor呢?再次,同样的处理……除了在这种情况下不存在all/ any-type函数。(你叫什么odd??)

    2020-02-08 20:13:41
    赞同 展开评论
问答分类:
问答地址: