Python 将列表与numpy浮动与常规浮动进行比较
给定以下代码:Python 将列表与numpy浮动与常规浮动进行比较,python,Python,给定以下代码: 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_
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,0.3], w) for w in [0.,0.1]]
to_l([0.2,0.3], 0.1)
但这并不是:
[to_l([0.2,0.3], w) for w in [0.,0.1]]
to_l([0.2,0.3], 0.1)
给出错误:
TypeError: '>=' not supported between instances of 'list' and 'float'
类型错误在第二种和第三种情况下很明显。我们将列表[0.2,0.3]与浮动0.1进行比较。但是有人能解释为什么它在第一种情况下工作吗?这被称为广播,由numpy支持。因此,当操作中的两个操作数的形状不同时,numpy将尝试广播它并执行该操作
将不起作用,因为此处不涉及numpy。您将得到以下错误:[0.2,0.3]>=0
将在numpy广播进入画面时工作np.数组([1,2,3])>2
也将起作用[1,2,3]>np.float32(2)
将不起作用,因为[1,2,3]>np.float(2)
只是pythonnp.float
的别名。但是float
和np.float32
分别是单精度数和双精度数的np实现np.float64
将不起作用,因为此处不涉及numpy。您将得到以下错误:[0.2,0.3]>=0
将在numpy广播进入画面时工作np.数组([1,2,3])>2
也将起作用[1,2,3]>np.float32(2)
将不起作用,因为[1,2,3]>np.float(2)
只是pythonnp.float
的别名。但是float
和np.float32
分别是单精度数和双精度数的np实现np.float64
- 这称为广播,由numpy支持。因此,当操作中的两个操作数的形状不同时,numpy将尝试广播它并执行该操作
thresh
是一个numpy.ndarray
这实际上与列表理解无关,这是一个关于numpyies的问题。我将从标题中删除它。这对np.array([0,0.1])中的w起作用。另外,np中的w的[([0.2,0.3],w)。数组([0,0.1])]
给出了与[0,0.1]]中的w的[([0.2,0.3],w)相同的结果。然而,[to_l([0.2,0.3],w)for w in[0,0.1]
不起作用。我将阅读更多关于numpy.ndarray
的内容,因为thresh
是一个numpy.ndarray
这实际上与列表理解无关,这是一个关于numpyes的问题。我将从标题中删除它。这对np.array([0,0.1])中的w起作用。另外,np中的w的[([0.2,0.3],w)。数组([0,0.1])]
给出了与[0,0.1]]中的w的[([0.2,0.3],w)相同的结果。但是,[to_l([0.2,0.3],w)for w in[0,0.1]
不起作用。我将阅读更多关于numpy.ndarray
的内容,谢谢。同样,这种类型转换(np.array([1,2,3])>2.astype('int')
(上述to_l()方法的一部分)的工作原理与([1,2,3])>2.astype('int')
的工作原理相同,因为列表无法转换为int。谢谢。同样,这种类型转换(np.array([1,2,3])>2.astype('int')
(上述to_l()方法的一部分)的工作原理与([1,2,3])>2.astype('int')
的工作原理相同,因为列表无法转换为int。