python很难设置lambda函数

标签 python vector lambda

我正在开发(为了学习 python)一个简单的类层次结构,目的是在系统的情况下求解微分方程(普通或系统),因变量必须成为 numpy.array 才能使用每个索引(如 y[0], y[1] )来表示 2 个不同的变量,在数学中是 dy1/dt = f(y1) dy2/dt=f(y2 )

在处理普通方程时使用此求解器,数组 y 的形状 = 1,且 N 个元素的大小。

现在考虑到所有这些无聊的理论,我过去常常通过 lambda 函数定义多个方程(系统)或单个方程,就像在这种情况下:

func01 = lambda t,u : 1 - np.exp(-0.5*(t-5))

这代表一步的答案,实际上lambda给出的解析解如下:

anal01 = lambda x,y : 0 if x < 5 else 1

但现在我遇到了一个问题(这是我第一次在 if 条件下使用 lambda) 口译员告诉我这个:

  anal01 = lambda x,y : 0 if x < 5 else 1
    ValueError: The truth value of an array with more than one element is ambiguous.  
    Use a.any() or a.all()

现在我已经遇到了这个问题......例如在求解器中出现单值和 y 向量的比较......我已经按照编译器告诉我的那样做了......并使用表单 error.all() = y_new- y_old(示例)

所以最后..问题是......在这种情况下如何出现???

编辑 我的代码中没有变量a ...

最佳答案

要了解为什么会出现此错误,请参阅 ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() .


在您的确切情况下,为什么不这样做

>>> np.where(x < 5, 0, 1)

例子

>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(x < 5, 0, 1)
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

使用 lambda 函数

>>> anal01 = lambda x,y : np.where(x < 5, 0, 1)
>>> anal01(x, None)
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])


名为 a 的变量(您的代码中没有)仅用于说明您应该如何处理 array。

关于python很难设置lambda函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51366535/

相关文章:

lambda - smalltalk:如何从集合中选择前 n 个项目

C# 在 lambda 中转换对象

python - 在 pandas groupby 聚合中包含缺失的值组合

python - Pywinauto - 有 2 个元素符合条件

C++11 将 vector 传递给构造函数

c++ - 升压:bad_any_cast: failed conversion using boost:any_cast error

c# - 为什么在作为普通委托(delegate)参数提供时必须转换 lambda 表达式

python - 语法错误 : Not a Chance - What is this error?

python 3 : What is the most efficient way to calculate all permutations of two lists summing to 100?

java - 是否有用于加速 vector 计算的 Java 库?