0

我已经设置了 x 和 y 的列表,例如

x=[1,2,3,4,5,6]
y=[1,4,9,16,25,36]

我需要找到定义为的一组 u 的 y 值

u = [[2,3,1],[4,2,1],[6,3,2],[2,4,5],[2,3,6]]

我正在使用这个插值模块。它类似于 numpy 插值

目前,我关注:

v = [interp(x,y,u[i]) for i in range(len(k))]

有没有办法绕过 for 循环,因为它增加了我的计算时间。我宁愿节省我的记忆而不是时间。我的列表很大!我希望可以使用内置的地图功能,但不知道如何使用它。

4

1 回答 1

3

map()也在内部循环 - 它只是在 C 端执行它更快。但是,您已经在使用列表推导,它也卸载到 C 并且可能会比map().

也就是说,有机会通过更改循环来获得速度和可读性:

v = [interp(x, y, i) for i in u]

在 Python 中,我们循环遍历迭代器,而不是索引。通过像你一样间接循环,你会显着减慢你的循环速度。它也使它的可读性大大降低。

至于 using map(),可以使用 usingfunctools.partial()创建一个调用interp()withxy预填充的函数:

import functools
f = functools.partial(interp, x, y)
v = list(map(f, u))

但是,正如我之前所说,这可能会更慢,并且可读性要差得多。

(假设您使用的是 CPython,我在此答案中使用术语 C 端,但在任何其他实现中,它也将更有效地实现,使用任何可用的较低级别选项)。

于 2012-11-22T12:40:13.707 回答