Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 使用映射将列表项添加到另一个列表的有效方法_Python_Optimization - Fatal编程技术网

Python 使用映射将列表项添加到另一个列表的有效方法

Python 使用映射将列表项添加到另一个列表的有效方法,python,optimization,Python,Optimization,我有两个浮动列表,分别是L1、L2或长度a、b。我还有一个长度为a的列表F,它的值是[-1,b-1]范围内的整数。我想用以下方式更新L2: 滤波器中i的(λx:F[x]+1,范围(len(F)): L2[F[i]+=L1[i] 基本上,F是L1指数的函数。对于L1的每个索引i,如果F[i]=-1,我们什么也不做,否则,我们取L1的第i项并将其添加到L2的第F[i]-th项 我在一个程序中这样做,随着我使结果更加精确,a和b的长度将呈指数增长。(另外,F大约是50%-1)我意识到这已经需要线性时

我有两个浮动列表,分别是L1、L2或长度a、b。我还有一个长度为a的列表F,它的值是[-1,b-1]范围内的整数。我想用以下方式更新L2:

滤波器中i的
(λx:F[x]+1,范围(len(F)):
L2[F[i]+=L1[i]
基本上,F是L1指数的函数。对于L1的每个索引i,如果F[i]=-1,我们什么也不做,否则,我们取L1的第i项并将其添加到L2的第F[i]-th项

我在一个程序中这样做,随着我使结果更加精确,a和b的长度将呈指数增长。(另外,F大约是50%-1)我意识到这已经需要线性时间,但我想知道是否有一些方法可以更快地提高常数,可能是通过列表/总和理解?或者,如果我需要在多次更新后了解L2的内容,是否有一种实用的方法来存储这些更新,并以更快的方式一次完成它们

如果我有两个列表列表LL1、LL2,每个列表分别包含长度为a和b的c个列表,并且只有一个列表/映射F,那么情况如何?如果我想让LL1[I]为[0,c-1]中的所有I更新LL2[I],那么有没有一种聪明的方法可以做到这一点,或者没有什么比逐个执行每个I更好的方法了


澄清:转换为numpy结构是完全可以接受的,我只是缺乏如何有效利用numpy的先验知识。

您的代码相当有效。就我所见,唯一可以改进的是避免使用lambda函数,这会增加每次迭代调用函数的开销。相反,您可以使用
enumerate
函数生成
F
的索引和值进行迭代,并使用简单的
if
语句过滤
F
的值:

for i, j in enumerate(F):
    if j != -1:
        L2[j] += L1[i]

考虑对代码进行矢量化(即使用NUMPY)。我很肯定这会提高歧管的速度。你能用numpy吗?或者这必须是纯python吗?numpy很好,但我完全不知道“歧管速度改进”意味着什么