如何提高 python 嵌套for loop的运行效率

python如何能把嵌套的for loop提升运行效率,比如以下代码,感谢

    D=15 #####数据个数
    container=[]
    for i in range(D):
        N=50+10*i ######区间长度
        A=int(len(close)/N) ########区间个数
        container1=[]
        for j in range(A):
            data_group=close[j*N:(j+1)*N] #######单一区间
            mean=data_group.mean()
            std=data_group.std()
            container2=[] ##########单一区间累积离差的container
            for k in range(len(data_group)):
                data_diff=data_group.iloc[0:k+1]-mean
                container2.append(data_diff.sum())
            RS=(np.max(container2)-np.min(container2))/std  ######单一区间极差####

参考GPT和自己的思路:

对于嵌套的for loop,可以考虑使用numpy中的向量化操作,尽量避免使用for loop,因为对于大型数据集,for loop的效率会很低。以下是针对上面的代码的优化建议:

  1. 使用numpy中的数组操作代替for loop
    将close数组切片后存储到二维数组中,然后使用numpy的函数操作进行计算,比如mean、std、max、min等,可以大大提高运行效率。

  2. 将for loop嵌套改为单层for loop
    将多层for loop合并成单层for loop,可以减少循环次数,进而提高效率。

  3. 尽量避免使用列表容器
    对于大量数据的存储,建议使用numpy的数组操作代替列表容器,在处理大数据时,numpy数组操作比python列表更快,因为numpy会占用更少的内存。

综上所述,可以使用numpy中的数组操作代替for loop循环,使用单层for loop进行计算,同时还可以使用numpy的数组代替列表容器来优化上述代码的运行效率。

可以考虑使用numpy的向量化操作来替代嵌套的for loop,以提高运行效率。以下是针对你的代码进行向量化改进的示例代码:


import numpy as np

D = 15 # 数据个数
container = []
for i in range(D):
    N = 50 + 10 * i # 区间长度
    A = int(len(close) / N) # 区间个数
    container1 = []
    for j in range(A):
        data_group = close[j*N:(j+1)*N] # 单一区间
        mean = np.mean(data_group)
        std = np.std(data_group)
        data_diff = np.cumsum(data_group - mean) # 累积离差
        container2 = np.concatenate(([data_diff[0]], np.diff(data_diff))) # 单一区间累积离差
        RS = (np.max(container2) - np.min(container2)) / std # 单一区间极差
        container1.append(RS)
    container.append(container1)

这里使用了numpy的cumsum函数来进行累积离差的计算,同时使用了numpy的diff函数来计算差分,避免了使用嵌套的for loop。同时,将多个append操作合并为一个concatenate操作,进一步提高了效率。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^