如何避免Python数据处理代码中多次调用append方法?
优化方案:减少/移除append的实现方法
你这段代码的两层append都是用于收集循环计算结果,完全可以通过列表推导式、numpy预分配数组两种方式去掉append操作,优化后的代码更简洁,性能也更好。另外注意你原代码存在缩进错误:A_all.append 应该缩进至第一层for循环内部,否则只会把最后一个item的计算结果存入列表,以下优化方案已经修正了该问题。
方案1:列表推导式实现(完全移除append)
直接把两层循环逻辑写在列表推导式中,不需要手动声明空列表、执行append操作:
import numpy as np # 注:iter、boots、get_corr为你预先定义好的变量/函数 items = [a1,a2,a3,a4,a5,a6,a7] n_col = np.shape(items[0])[1] A_all = [ np.mean([ np.mean(get_corr(item[:, np.random.choice(n_col, boots)].T)) for _ in range(iter) ]) for item in items ]
方案2:numpy预分配数组实现(适合大样本高性能需求)
如果你的iter、boots参数数值较大,预分配numpy数组直接下标赋值的性能比列表操作更高,全程无append:
import numpy as np items = [a1,a2,a3,a4,a5,a6,a7] n_col = np.shape(items[0])[1] # 预分配结果数组,长度和items数量一致 A_all = np.zeros(len(items)) for t, item in enumerate(items): # 预分配当前item的bootstrap采样结果数组 bs_res = np.zeros(iter) for i in range(iter): idx_BS = np.random.choice(n_col, boots) corr_atra = get_corr((item[:,idx_BS]).T) bs_res[i] = np.mean(corr_atra) A_all[t] = bs_res.mean()
内容的提问来源于stack exchange,提问作者Raz
相关产品推荐
相关产品推荐

