Python 数组上Lambda表达式的模糊求值

Python 数组上Lambda表达式的模糊求值,python,numpy,lambda,Python,Numpy,Lambda,我想使用一个lambda,如果x等于零,它会给x加一。我尝试过以下表达方式: t = map(lambda x: x+1 if x==0 else x, numpy.array()) t = map(lambda x: x==0 and x+1 or x, numpy.array()) t = numpy.apply_along_axis(lambda x: x+1 if x==0 else x, 0, numpy.array()) 每个表达式都返回以下错误: ValueError: The

我想使用一个
lambda
,如果x等于零,它会给x加一。我尝试过以下表达方式:

t = map(lambda x: x+1 if x==0 else x, numpy.array())
t = map(lambda x: x==0 and x+1 or x, numpy.array())
t = numpy.apply_along_axis(lambda x: x+1 if x==0 else x, 0, numpy.array())
每个表达式都返回以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我对
map()
numpy.apply\u沿轴()
的理解是,它需要一些函数,并将其应用于数组的每个值。从错误来看,lambda的计算结果似乎是
x=array
,而不是array中的某个值。我做错了什么


我知道我可以编写一个函数来实现这一点,但我想更加熟悉python的函数编程方面。

如果您使用的是numpy,您应该编写矢量化代码:

arr + (arr == 0)

什么是
numpy.array
?我想这不是这个名字的numpy函数吧?你想把这个应用到什么数据上?它对我有用;例如,
map(λx:x+1,如果x==0,则x=0,np.array([0,1,2,3])
的计算结果与预期一致。请提供一个展示您正在描述的行为的最小工作示例。您的数组是多维的吗?另一方面,如果x==0,则
x+1
可以写成
1如果x==0
1如果不是x
x==0和x+1或x
我发现不太清楚。也许最短的形式是
x if x else 1
@Joe:你能用一个实际的数组来展示一个实际的例子吗?你能再解释一下吗?我不确定这里发生了什么。@Joe在Python中遍历大型数组的每个元素的速度很慢。numpy数组上的算术、逻辑和比较运算符是按元素处理的,因此这将以更有效的形式给出结果。我的目标是矢量化,我只是不太明白您发布的表达式是如何工作的。@Joe
(arr==0)
给出一个布尔数组,该数组为
True
,其中
arr
等于
0
。在算术中,
True
被转换为
1
False
被转换为
0
,因此这会添加
1
,其中
arr
等于
0