我正在尝试查找两个非常大的文件之间的欧几里得距离。如何加快计算速度?因为,距离计算消耗大量时间。
我尝试使用Ipyparallel方法来利用可用的内核,但是这似乎仍然很慢。
import h5py
import numpy as np
import pandas as pd
from ipyparallel import Client
rc=Client(profile='setupparallelcluster')
dview=rc[:]
dview.scatter('df',pd.read_csv("singlepcsavecoordinates.dat",sep="\t",
names=["CellNum","SegName","xcoord", "ycoord", "zcoord"]))
dview.execute('d2=[]')
datagrc=h5py.File('newdata.hdf5','r')
dataxpos=datagrc['dataX']
dataypos=datagrc['dataY']
datazpos=datagrc['dataZ']
@dview.parallel(block=True)
def loopover(a,b,c):
for ij in range(len(a)):
grcall=[a[ij],b[ij],c[ij]]
for jj in range(len(df)):
pcall=[df['xcoord'][jj],df['ycoord'][jj],df['zcoord'][jj]]
eucdist=sum((p-q)**2 for p,q in zip(pcall,grcall)) ** .5
d2.append(eucdist)
return len(d2)
chkd2=loopover(dataxpos,dataypos,datazpos)
print chkd2
请告诉我是否有更好的方法?