由于这个问题涉及大学项目,我认为我不被允许分享我的完整代码而不被视为作弊,但无论如何: 在我的代码中我必须调用一个函数:
f = lambda t,y: np.array([y[0] - 2*y[1] + t*y[2], - y[0] + y[1] + y[2] - t*t, t*y[1] - y[1] + t*t*t])
我的想法是,我使用这些函数来计算 (3,n) 数组的结果,其中第一行结果是使用
f
中的第一个函数计算的,依此类推。问题来自于如何调用每个特定的函数。
我尝试过使用
f[0](t,y)
(例如,参考数组f
的第一个函数),但这导致了
类型错误:“函数”对象不可下标。
预期的结果是
f[0](t,y)
在计算时会使用[0]
的索引f
中的函数。
您定义了一个函数,而不是 3 个:
In [351]: f = lambda t,y: np.array([y[0] - 2*y[1] + t*y[2], - y[0] + y[1] + y[2] - t*t, t*y[1] - y[1] + t*t*t])
提问时,你应该提供一个简单的例子,例如:
In [358]: y = np.random.randint(1,5,(3,4)); y
Out[358]:
array([[1, 3, 1, 1],
[1, 2, 4, 1],
[3, 3, 1, 4]])
In [359]: res = f(2,y)
In [360]: res
Out[360]:
array([[ 5, 5, -5, 7],
[-1, -2, 0, 0],
[ 9, 10, 12, 9]])
In [361]: res[0]
Out[361]: array([ 5, 5, -5, 7])
调用
f
返回一个 3 行数组。您可以引用一行。但你不能索引 f
本身:
In [362]: f[0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[362], line 1
----> 1 f[0]
TypeError: 'function' object is not subscriptable
您可以定义 3 个函数的列表:
In [363]: f = [lambda t,y: y[0] - 2*y[1] + t*y[2], lambda t,y: - y[0] + y[1] + y[2] - t*t, lambda t,y: t*y[1] - y[1] + t*t*t]
In [364]: f
Out[364]:
[<function __main__.<lambda>(t, y)>,
<function __main__.<lambda>(t, y)>,
<function __main__.<lambda>(t, y)>]
In [366]: f[0](2,y)
Out[366]: array([ 5, 5, -5, 7])
如果我们用常规的
def
语法编写你的函数,也许会更清楚。 lambda
只是一个“简写”;它不会改变函数的性质。
In [368]: def f(t,y):
...: res = np.array([y[0] - 2*y[1] + t*y[2],
...: - y[0] + y[1] + y[2] - t*t,
...: t*y[1] - y[1] + t*t*t])
...: return res
...:
In [369]: f(2,y)
Out[369]:
array([[ 5, 5, -5, 7],
[-1, -2, 0, 0],
[ 9, 10, 12, 9]])