|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先,感谢论坛里的各位前辈在百忙中垂阅我的贴子,小弟感激不尽~
问题如下:
最近在使用Python做聚类,需要求欧式距离,这倒不是什么难事,有现成的库函数可以调用。关键就在于我的数据量较大,最小的一个点集文件,都有36311个点,要求出两两之间的距离,我是使用2个while循环嵌套来进行计算,发现耗时极长,想让各位前辈看看怎么改进一下,代码如下:
- from scipy.spatial import distance
- import numpy as np
- #load data
- file=open("L:\CFSFDP1\Year_2006.txt",'r')
- outFile = open("L:\CFSFDP1\Distances_2006.txt",'w')
- lines=file.readlines()
- rows=len(lines)
- Point_Set=np.zeros((rows,2))
- row=0
- for line in lines:
- line=line.strip().split(',')
- Point_Set[row,:]=line[:]
- row+=1
- i = 0
- while i < rows:
- j = i + 1
- while j < rows:
- Distances = distance.euclidean(Point_Set[i], Point_Set[j])
- newline = str(i) + ',' + str(j) + ',' +str(Distances) + '\n'
- outFile.write(newline)
- print(newline)
- j+=1
- if j > rows:
- break
- j = i + 1
- i+=1
复制代码
点集文件如下所示啦:每行代表一个点,XY坐标用逗号隔开
我处理完,输出的格式是:“0,1,distances”
我的代码中使用了scipy.spatial.distance.euclidean函数,下面是它的一个示例:
>>> from scipy.spatial import distance
>>> distance.euclidean([1, 0, 0], [0, 1, 0])
1.4142135623730951
>>> distance.euclidean([1, 1, 0], [0, 1, 0])
1.0
最后,感谢您花时间阅读我的帖子,谢谢你们,小弟刚刚起步,还请各位前辈多多指教~
|
|