为了账号安全,请及时绑定邮箱和手机立即绑定

多个参数的Numpy‘Logicalor’

多个参数的Numpy‘Logicalor’

白板的微信 2019-07-13 15:22:13
Numpy‘slogical_or函数只需两个数组就可以进行比较。如何找到两个以上数组的联合?(关于Numpy‘s,也可以提出同样的问题logical_and并获得两个以上数组的交集。)
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

如果你在问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术语中,可以用作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它,或替代all显式axis.

其他行动呢,比如logical_xor?再说一次,同样的交易…但在这种情况下all/any-适用的类型函数。(你叫它什么?odd?)


查看完整回答
反对 回复 2019-07-13
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果有人还需要这个-假设你有三个布尔数组abc同样的形状and要素方面:

a * b * c

这给了or:

a + b + c

这就是你想要的吗?堆积如山logical_andlogical_or是不实际的。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 1064 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信