使“for”循环更快

时间:2016-02-18 13:40:21

标签: python python-2.7 numpy subprocess mpi4py

我正在尝试在大型3D数据集上运行此代码。目标是计算每个网格点与所有其他网格点的时间相关性(轴0)。我想做下面的代码:两个循环,每个维度一个。对于小型数据集来说这是可以的,但现在我转向更大的分辨率并且需要数天才能运行。

    for lat in range(latitude.shape[0]):
        print('-->lat_points = ' + str(lat) + '/' +
              str(latitude.shape[0]))
        for lon in range(longitude.shape[0]):
            print ('lon_points = ' + str(lon) + '/' +
                   str(longitude.shape[0]))
            corr = correlation(sub_cube1[:, lat, lon], sub_cube2)
            rho[lat, lon] = corr.min()
            vec_lat[lat, lon] = np.where(corr == corr.min())[0]
            vec_lon[lat, lon] = np.where(corr == corr.min())[1]

任何人都可以建议加快/优化这段代码,记住我只能访问标准的python库(所以没有mpi4py!)?

correlation函数使用pandas来计算两个时间序列之间的相关系数:

corr_coef = np.empty(shape=series1[0, ].shape)
for j in range(series1.shape[-2]):
    for k in range(series1.shape[-1]):
        apd = pd.Series(series1[:, j, k])
        bpd = pd.Series(series2[:, j, k])
        corr_coef[j, k] = apd.corr(bpd)

由于

1 个答案:

答案 0 :(得分:0)

也许使用嵌套列表理解:

[[correlation(sub_cube1[:, lat, lon], sub_cube2).min() 
  for lon in xrange(longitude.shape[0])] 
 for lat in xrange(latitude.shape[0])]