Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python的interplating列表_Python_List_Map_Interpolation - Fatal编程技术网

使用python的interplating列表

使用python的interplating列表,python,list,map,interpolation,Python,List,Map,Interpolation,例如,我设置了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循环,因为它增加了我的计算时间。 我宁愿节省我的记忆而不是时间。我的名单太大了! 我希望可以使用内置的

例如,我设置了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循环,因为它增加了我的计算时间。 我宁愿节省我的记忆而不是时间。我的名单太大了! 我希望可以使用内置的map函数,但不知道如何使用它。

map()
也在内部循环-它只是在速度更快的地方进行C端循环。但是,您已经在使用a,它也会卸载到C,并且可能比
map()
更快

也就是说,通过更改循环,可以提高速度和可读性:

v = [interp(x, y, i) for i in u]
在Python中,我们循环遍历迭代器,而不是索引。通过像以前那样间接循环,您将显著降低循环速度。这也使得它的可读性大大降低

至于使用
map()
,可以使用生成一个调用
interp()
的函数,该函数带有
x
y
前缀:

import functools
f = functools.partial(interp, x, y)
v = list(map(f, u))
然而,正如我之前所说的,这可能会更慢,而且可读性要差得多

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

map()
也在内部循环-它只是在C-side更快的地方进行循环。但是,您已经在使用a,它也会卸载到C,并且可能比
map()
更快

也就是说,通过更改循环,可以提高速度和可读性:

v = [interp(x, y, i) for i in u]
在Python中,我们循环遍历迭代器,而不是索引。通过像以前那样间接循环,您将显著降低循环速度。这也使得它的可读性大大降低

至于使用
map()
,可以使用生成一个调用
interp()
的函数,该函数带有
x
y
前缀:

import functools
f = functools.partial(interp, x, y)
v = list(map(f, u))
然而,正如我之前所说的,这可能会更慢,而且可读性要差得多


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

谢谢提醒我,我可以像这样使用列表理解,它不会大大提高速度。如果我用广播(我通常认为它是向量运算的同义词)修改interp模块来处理输入形状,我的速度会提高,恐怕我不知道它的数学原理。我想你是对的,操作的费用在计算中,而不是在循环中。你是对的,interp模块在len(x)=len(y)=100,len(u[0])=1280的情况下,一次调用大约需要0.02s,如果我循环1000次,速度会非常慢。因此,如果我可以更改interp模块,使其能够处理2D列表,那么时间是否会合理减少?这完全取决于您如何实现该更改。最好的答案是试试看。partial不能正确地将变量传递给interp模块,请您解释一下如何使用partial,这似乎是一个很好的解决方案。谢谢提醒我,我可以像那样使用列表理解,它不会大大提高速度。如果我用广播(我通常认为它是向量运算的同义词)修改interp模块来处理输入形状,我的速度会提高,恐怕我不知道它的数学原理。我想你是对的,操作的费用在计算中,而不是在循环中。你是对的,interp模块在len(x)=len(y)=100,len(u[0])=1280的情况下,一次调用大约需要0.02s,如果我循环1000次,速度会非常慢。因此,如果我可以更改interp模块,使其能够处理2D列表,那么时间是否会合理减少?这完全取决于您如何实现该更改。最好的答案是试试看。partial不能正确地将变量传递给interp模块,请您解释一下如何使用partial,这似乎是一个很好的解决方案。