比较带有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只是python float的别名。但是np.float32np.float64分别是单精度和双精度数字的np实现。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...