0
设置我有一个大的(〜100GB)数据集结构numpy的阵列x
,我想斌分别由物业p1
,并希望找到平均值和财产p2
标准偏差的xs
每个垃圾桶。我的方法如下所示,但速度很慢。有没有更快/更numpythonic的方式来做到这一点?我无法将整个数据集放在内存中,但是我有很多内核,所以平行化的好方法也不错。平均大数据与垃圾箱中numpy的
nbins=30
bin_edges=np.linspace(0,1,nbins)
N, p2_total, means_p2, stds_p2 = np.zeros((4,nbins))
for x in xs_generator():
p1s = x['p1']
p2s = x['p2']
which_bin=np.digitize(p1s,bins=bin_edges)
for this_bin,bin_edge in enumerate(bin_edges):
these_p1s = p1s[which_bin==this_bin]
these_p2s = p2s[which_bin==this_bin]
N[this_bin] += np.size(these_p1s)
p2_total[this_bin] += np.sum(these_p2s)
p2sq_total[this_bin] += np.sum(these_p2s**2)
means_p2 = p2_total/N
stds_p2 = np.sqrt(p2sq_total/N**2)
谢谢为了你的回答,它非常整齐。尽管我期望它的执行速度更快,但实际上几乎完全是同一时间。它也给出了稍微不同的答案,但我没有检查哪一个会导致更大的错误。 –
表现失望,对不起。你应该在'xs'循环中并行化。要做到这一点,请看http://www.perrygeo.com/parallelizing-numpy-array-loops-with-cython-and-mpi.html。这不是一个正确的答案,但我希望你能找到有用的东西 –