numpy 数组上的 lambda 函数。这段代码有什么问题吗?

py_*_*bie 4 python lambda numpy

这段代码有什么问题:

将 numpy 导入为 np

A = np.array([[-0.5, 0.2, 0.0],
          [4.2, 3.14, -2.7]])

asign = lambda t: 0 if t<0 else 1
asign(A)
print(A)
Run Code Online (Sandbox Code Playgroud)

预期输出:

     [[0.  1.  0.]
      [ 1.  1. 0.]]
Run Code Online (Sandbox Code Playgroud)

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

Khe*_*epu 5

那么 lambda 本身不会遍历整个数组。为此,您将需要一个高阶函数。在这种情况下:地图。

A = np.array([[-0.5, 0.2, 0.0],
              [4.2, 3.14, -2.7]])

asign = lambda t: 0 if t<0 else 1
A = list(map(asign, A))
Run Code Online (Sandbox Code Playgroud)

Map 将迭代每个元素并将其传递给函数。我将映射包装在列表中,因为它返回映射类型的对象,但您可以通过这种方式转换它。