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
。