例如,我设置了x和y的列表
x=[1,2,3,4,5,6]
y=[1,4,9,16,25,36]
我需要找到一组定义为
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循环,因为它增加了我的计算时间。我宁愿留出我的记忆而不是时间。我的清单大小非常大!我希望可以使用内置的地图功能,但不知道如何使用它。
map()
内部也循环 - 它只是在C端做它更快。但是,您已经在使用列表推导,它也卸载到 C 并且可能比 map()
更快。
也就是说,这里有机会通过更改循环来提高速度和可读性:
v = [interp(x, y, i) for i in u]
在 Python 中,我们遍历迭代器,而不是索引。通过间接循环,您将显着减慢循环速度。这也使它的可读性大大降低。
至于使用 map()
,可以使用 functools.partial()
来创建一个函数,该函数使用 x
调用interp()
并预填充y
:
import functools
f = functools.partial(interp, x, y)
v = list(map(f, u))
但是,正如我之前所说,这可能会更慢,而且可读性要差得多。
(我在此答案中使用术语 C 端,假设您使用的是 CPython,但在任何其他实现中,它也会使用任何可用的较低级别选项更有效地实现)。