numpy数组上的lambda函数。这段代码怎么了?

2024-10-05 13:11:15 发布

您现在位置:Python中文网/ 问答频道 /正文

这个代码有什么问题:

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

预期输出:

^{pr2}$

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


Tags: lambda代码numpy元素ifnpany数组
3条回答

嗯,lambda本身不会穿过整个阵列。为此,你需要一个高阶函数。在本例中:map。在

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将遍历每个元素并通过函数传递。 我将map包装在一个列表中,因为它返回一个filter类型的对象,但是您可以这样转换它。在

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

  • Python:

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

    ^{2美元

这对我很有效:

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

相关问题 更多 >

    热门问题