python - 将 lambda 表达式应用于数组元素时出现 ValueError

标签 python arrays numpy lambda runtime-error

目前我在处理 numpy.array - 4x1 - 即时遇到错误

[[-1.96113883]
 [-3.46144244]
 [ 5.075857  ]
 [ 1.77550086]]

使用 lambda 函数 f = lambda x: x if (x > 0) else (x * 0.01)

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

我在 stackoverflow.com 上搜索了不同的主题,但没有找到任何令人满意的问题解释和适合我的案例(许多对 运算符的不明确引用,矢量化代码等.).

在处理完数组后,我期望的是一个与输入数组具有相同维度的数组,并且每个值都根据函数进行了修改,例如:

[[-0.0196113883]
 [-0.0346144244]
 [ 5.075857  ]
 [ 1.77550086]]

最后,有人能给我一个解决方案和解释为什么会出现这个错误吗?谢谢你的建议。

最佳答案

x > 0 作为一个整体对您的 numpy 数组进行评估,返回另一个 bool 数组。但是,if 语句将整个数组计算为单个操作。

arr = np.array([[-1.96113883],
                [-3.46144244],
                [ 5.075857  ],
                [ 1.77550086]])
print arr > 0
   [[False]
    [False]
    [ True]
    [ True]]

如错误消息中所述, bool 数组的真值不明确。

相反,正如 ajcr 在评论中指出的那样,您应该使用 np.where 作为矢量化 if-else 语句

例如

np.where(arr > 0, arr, arr*0.01)
array([[-0.01961139],
       [-0.03461442],
       [ 5.075857  ],
       [ 1.77550086]])

关于python - 将 lambda 表达式应用于数组元素时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34381847/

相关文章:

python3 (nltk/numpy/等) : ISO efficient way to compute find pairs of similar strings

python - 如何使用正则表达式匹配捕获组 1

javascript - 无法按索引引用数组

python - 如何将numpy数组转换为Matlab矩阵?

javascript - 使用包含属性键和值的字符串创建数组

C - 指向随机值的指针

python - 加载文本文件 python 无法将字符串转换为 float

python - Pandas 多重索引在给定元组时成功,在给定列表时失败

python - 如何编写适用于 Linux 管道的 Python 脚本?

Python:非阻塞+非失效进程