我正在开发(为了学习 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
的变量(您的代码中没有)仅用于说明您应该如何处理 a
rray。
关于python很难设置lambda函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51366535/