如何加速numpy数组嵌套循环运算(无循环实现方案)
矢量化替代嵌套循环优化numpy运算
你这段嵌套循环可以完全用numpy的矢量化切片操作替代,彻底避免Python级别的循环,大幅提升运算速度,尤其是nup数值较大时效果更明显。
原循环里的四个分支逻辑,对应以下四个矢量化操作:
处理
j == i+1的情况:x_new[:-1] -= U1[:-1] * x_old[1:]切片
[:-1]覆盖了所有i满足i+1 < nup的索引,对应j=i+1的x_old索引就是1:。处理
j == i-1的情况:x_new[1:] -= L1[:-1] * x_old[:-1]切片
1:覆盖所有i >=1的索引,对应j=i-1的x_old和L1索引是[:-1]。处理
j == i+nf的情况:x_new[:-nf] -= U2[:-nf] * x_old[nf:]切片
[:-nf]确保i+nf < nup,对应x_old的索引是nf:。处理
j == i-nf的情况:x_new[nf:] -= L2[:-nf] * x_old[:-nf]切片
nf:确保i-nf >=0,对应x_old和L2的索引是[:-nf]。
把这四行代码放在一起,就是原嵌套循环的完整替代实现,不需要任何循环。这种方式利用numpy的底层矢量化计算(C实现),比Python循环快几个数量级,nup越大优势越明显。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

