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

2024-10-01 09:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个代码,生成一个大的3d numpy数据观察数组(float)。尺寸为(33000 x 2016 x 53),对应于(#obs.位置x 5分钟间隔(每周x周,每年x周)。它非常稀疏(大约有1.5%的条目被填充)。你知道吗

目前,我通过拨打:

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

或者

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

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

  1. 将每个2D(33000 x 2016)切片保存为CSV或其他“通用格式”数据文件
  2. 取第三维的平均值(因此我应该得到33000 x 2016矩阵)

我试过用以下方法保存:

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.零或者np.空?在忽略未更新的条目(mean(my3Darray,3)不忽略0条目)的情况下,如何获取第三维的平均值。你知道吗


Tags: 数据方法代码numpy尺寸np条目slice
1条回答
网友
1楼 · 发布于 2024-10-01 09:16:58

你可以用numpy的二进制格式保存,我用的是:np.savez。你知道吗

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

相关问题 更多 >