保存(和平均)大型稀疏Numpy数组

时间:2014-04-28 09:22:21

标签: python csv numpy sparse-matrix

我编写了一个代码,用于生成大型3d numpy数据观察数组(浮点数)。尺寸为(33,000 x 2016 x 53),对应于(#obs.locations x 5min_intervals_perweek x weeks_in_leapyear)。它非常稀疏(约有1.5%的条目被填满)。

目前我通过致电:

来做到这一点
my3Darray = np.zeros(33000,2016,53)

my3Darray = np.empty(33000,2016,53)

我的循环然后一次一个条目索引到数组中,并使用浮点数更新1.5%(这部分实际上非常快)。然后我需要:

  1. 将每个2D(33000 x 2016)切片保存为CSV或其他常规格式'数据文件
  2. 取第三维的平均值(所以我应该得到一个33000 x 2016矩阵)
  3. 我尝试过保存:

    for slice_2d_week_i in xrange(nweeks):
       weekfile = str(slice_2d_week_i)
       np.savetxt(weekfile, my3Darray[:,:,slice_2d_week_i], delimiter=",")
    

    但是,这非常慢,输出中的空条目显示为

    0.000000000000000000e+00
    

    使文件大小变大。

    是否有更有效的保存方式(可能会为从未更新的条目留下空白?)除了np.zeros或np.empty之外,还有更好的方法来分配数组吗?如何在忽略未更新的条目的同时取第三维的均值(均值(my3Darray,3)不忽略0条目。)

1 个答案:

答案 0 :(得分:0)

你可以保存为numpy的二进制格式之一,这是我使用的格式:np.savez

您可以使用np.sum(a, axis=2) / np.sum(a != 0, axis=2)进行平均。请记住,当分母中有零时,这仍然会给你NaN