如何解决比较带有numpy浮点数和常规浮点数的列表
给出以下代码:
def to_l(pos_probs,threshold):
return (pos_probs >= threshold).astype('int')
thresh = np.arange(0,0.2,0.1)
print(thresh)
这有效:
print([to_l([0.2,0.3],w) for w in thresh])
结果:
[0. 0.1]
[array([1,1]),array([1,1])]
但这不是:
[to_l([0.2,w) for w in [0.,0.1]]
这不是:
to_l([0.2,0.1)
给出错误:
TypeError: '>=' not supported between instances of 'list' and 'float'
在第二和第三种情况下,类型错误很明显。我们正在将列表[0.2,0.3]与浮点数0.1进行比较。
但是有人会解释为什么它在第一种情况下有效吗?
解决方法
这称为numpy支持的广播。因此,当操作中的两个操作数具有不同的形状时,numpy将尝试广播它并执行操作。
-
[0.2,0.3] >= 0
将不起作用,因为此处不涉及numpy。您将收到错误:
TypeError: '>=' not supported between instances of 'list' and 'float'
-
np.array([1,2,3]) > 2
可以使numpy广播成为现实。 -
[1,3] > np.float32(2)
也可以使用
但是,
-
[1,3] > np.float(2)
将不起作用,因为np.float
只是pythonfloat
的别名。但是np.float32
和np.float64
分别是单精度和双精度数字的np实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。