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将尝试广播它并执行该操作

  • [0.2,0.3]>=0
    将不起作用,因为此处不涉及numpy。您将得到以下错误:
  • np.数组([1,2,3])>2
    将在numpy广播进入画面时工作
  • [1,2,3]>np.float32(2)
    也将起作用
但是,

  • [1,2,3]>np.float(2)
    将不起作用,因为
    np.float
    只是python
    float
    的别名。但是
    np.float32
    np.float64
    分别是单精度数和双精度数的np实现

    • 这称为广播,由numpy支持。因此,当操作中的两个操作数的形状不同时,numpy将尝试广播它并执行该操作

      • [0.2,0.3]>=0
        将不起作用,因为此处不涉及numpy。您将得到以下错误:
      • np.数组([1,2,3])>2
        将在numpy广播进入画面时工作
      • [1,2,3]>np.float32(2)
        也将起作用
      但是,

      • [1,2,3]>np.float(2)
        将不起作用,因为
        np.float
        只是python
        float
        的别名。但是
        np.float32
        np.float64
        分别是单精度数和双精度数的np实现

      因为
      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。