如何在 numpy 中使用 3 向量函数?

问题描述 投票:0回答:1

由于这个问题涉及大学项目,我认为我不被允许分享我的完整代码而不被视为作弊,但无论如何: 在我的代码中我必须调用一个函数:

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
中的函数。

numpy math numpy-ndarray
1个回答
0
投票

您定义了一个函数,而不是 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]])
© www.soinside.com 2019 - 2024. All rights reserved.