我有大数据集,代表220维周期空间中的1.2M点(x改变fom(-pi,pi))...(矩阵:1.2M x 220)。
我想计算这些点之间的距离直方图,同时考虑周期性。我已经在python中编写了一些代码但是对于我的测试用例来说它仍然很慢(我甚至没有尝试在整个集合上运行它......)。
你可以看看并帮我调整一下吗?
非常感谢任何建议和评论。
import numpy as np
# 1000x220 test set (-pi,pi)
d=np.random.random((1000, 220))*2*np.pi-np.pi
# calculating theoretical limit on the histogram range, max distance between
# two points can be pi in each dimension
m=np.zeros(np.shape(d)[1])+np.pi
m_=np.sqrt(np.sum(m**2))
# hist range is from 0 to mm
mm=np.floor(m_)
bins=mm/0.01
m=np.zeros(bins)
# proper calculations
import time
start_time = time.time()
for i in range(np.shape(d)[0]):
diff=d[:-(i+1),:]-d[i+1:,:]
diff=np.absolute(diff)
adiff=diff-np.pi
diff=np.pi-np.absolute(adiff)
s=np.sqrt(np.einsum('ij,ij->i', diff,diff))
m+=np.histogram(s,range=(0,mm),bins=bins)[0]
print time.time() - start_time
答案 0 :(得分:0)
我认为通过将范围(...)划分为几个较小的范围并使用线程模块让几个线程同时运行循环,您将看到最大的改进,从将主循环分解为较小的部分