numpy 我怎样才能使这段代码更快(不使用循环)?

cvxl0en2  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(150)

我尝试在每个循环中对numpy数组x_new执行此操作。有什么方法可以让它更快吗?

for i in range(nup):
    for j in range(nup):
        if j==i+1:
            x_new[i]=x_new[i]-U1[i]*x_old[j]
        elif j==i-1:
            x_new[i]=x_new[i]-L1[j]*x_old[j]
        elif j==i+nf:
            x_new[i]=x_new[i]-U2[i]*x_old[j]
        elif j==i-nf:
            x_new[i]=x_new[i]-L2[j]*x_old[j]

nup很大时,它需要太长的时间。

polhcujo

polhcujo1#

你可以通过删除内部循环并将j值替换为条件中使用的表达式来优化循环。这样,你可以直接访问所需的索引,而无需迭代j的所有可能值:

for i in range(nup):
    if i + 1 < nup:
        x_new[i] -= U1[i] * x_old[i + 1]
    if i - 1 >= 0:
        x_new[i] -= L1[i - 1] * x_old[i - 1]
    if i + nf < nup:
        x_new[i] -= U2[i] * x_old[i + nf]
    if i - nf >= 0:
        x_new[i] -= L2[i - nf] * x_old[i - nf]

这种优化将时间复杂度从O(nup^2)降低到O(nup),这将显著加快循环速度。

相关问题