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

时间:2018-11-15 00:11:18

标签: python numpy lambda

此代码有什么问题:

将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)

预期:

     [[0.  1.  0.]
      [ 1.  1. 0.]]

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

3 个答案:

答案 0 :(得分:2)

单独运行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))

Map将遍历每个元素,并将其传递给函数。 我将地图包装在一个列表中,因为它返回一个类型为filter的对象,但是您可以通过这种方式进行转换。

答案 1 :(得分:0)

这对我有用:

A = A.clip(min=0, max=1)

答案 2 :(得分:0)

您可以使用lambda,但是numpy数据类型允许您执行许多“ matlab类型”操作(对于那些习惯于此操作的人):

  • python:

    a = np.array([1, 2, 3, 4, 5])
    ((a > 1) & (a < 3)).astype(int)
    # array([0, 1, 0, 0, 0])
    
  • 倍频程/ matlab

    a = [1,2,3,4,5];
    a>1 & a<3
    % ans =
    %
    %  0  1  0  0  0