我有一个m x n
数组:a
,其中整数m > 1E6
和n <= 5
。numpy:评估矩阵中的函数,使用之前的数组作为参数计算下一个
我有功能˚F和ģ,其由这样的:˚F(ü,ģ(ü,t))的。 ü是一个1 x n
数组,t是一个标量,并且F和G返回1 x n
数组。
我需要˚F评估的a
每个row
,并使用先前估计的行为ü -array为接下来的评测。我需要做出这样的评估m
。
这必须非常快。我之前对整个数组的评估印象深刻,但是这个问题需要使用先前计算的数组作为计算下一个数组的参数。我不知道如果StringFunction可以做到这一点。
例如:
a = zeros((1000000, 4))
a[0] = asarray([1.,69.,3.,4.1])
# A is a float defined elsewhere, h is a function which accepts a float as its argument and returns an arbitrary float. h is defined elsewhere.
def G(u, t):
return asarray([u[0], u[1]*A, cos(u[2]), t*h(u[3])])
def F(u, t):
return u + G(u, t)
dt = 1E-6
for i in range(1, 1000000):
a[i] = F(a[i-1], i*dt)
i += 1
与上述代码的问题是,它是缓慢的地狱。我需要用numpy毫秒来完成这些计算。
我该怎么做我想要的?
谢谢你的时间。
亲切的问候,
马吕斯
你的问题没有完全有意义......如果** u **是先前评估过的行,那么你的公式就不会使用当前行。我猜你的意思是** ** **(** v **,** G **(** u **,t)),其中** u **是评估最后一行的结果,并且** v **是当前行,但请确认,并定义如何处理第一行,其中没有“以前评估的行”可用。另外,更重要的是,我不知道** F **和** G **做什么,我怀疑任何人都能给你一个满意的答案。 – Jaime
不,据我所知,我输入的是我想要做的。我会添加更多的信息。 –
你可以添加一个缓慢但正确的实现代码吗? –