Python 使用映射将列表项添加到另一个列表的有效方法
我有两个浮动列表,分别是L1、L2或长度a、b。我还有一个长度为a的列表F,它的值是[-1,b-1]范围内的整数。我想用以下方式更新L2: 滤波器中i的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)我意识到这已经需要线性时
(λ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很好,但我完全不知道“歧管速度改进”意味着什么