我编写了一个代码,用于生成大型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%(这部分实际上非常快)。然后我需要:
我尝试过保存:
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条目。)
答案 0 :(得分:0)
你可以保存为numpy的二进制格式之一,这是我使用的格式:np.savez。
您可以使用np.sum(a, axis=2) / np.sum(a != 0, axis=2)
进行平均。请记住,当分母中有零时,这仍然会给你NaN
。