>>> import numpy as np
>>> x = np.eye(3)
>>> x[1, 2] = .5
>>> x
array([[ 1. , 0. , 0. ],
[ 0. , 1. , 0.5],
[ 0. , 0. , 1. ]])
>>> 0 < x.any() < 1
False
>>>
我想检查 numpy 数组是否包含 0 到 1 之间的任何值。
我读了0 < x.any() < 1
就像“如果有任何元素的大小大于 0 小于 1,则返回 true”,但显然不是这种情况。
如何对 numpy 数组进行算术比较?
最佳答案
>>> np.any((0 < x) & (x < 1))
True
什么 x.any()
实际上:它与 np.any(x)
相同,意味着它返回 True
如果 x
中有任何元素是非零的。所以你的比较是0 < True < 1
,这是错误的,因为在 python 2 0 < True
中是真的,但是True < 1
不是,因为 True == 1
.
相比之下,在这种方法中,我们创建 bool 数组来判断每个元素的比较是否为真,然后检查该数组的任何元素是否为真:
>>> 0 < x
array([[ True, False, False],
[False, True, True],
[False, False, True]], dtype=bool)
>>> x < 1
array([[False, True, True],
[ True, False, True],
[ True, True, False]], dtype=bool)
>>> (0 < x) & (x < 1)
array([[False, False, False],
[False, False, True],
[False, False, False]], dtype=bool)
你必须做显式的 &
,因为不幸的是 numpy 不能(我认为不能)使用 python 的内置比较运算符链。
关于python - numpy 数组的算术比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395127/