我将文件中的数据集读取到numpy
数组中,如下所示:
def read_data(filename):
data = np.empty(shape=[0, 65], dtype=int)
with open(filename) as f:
for line in f:
data = np.vstack((data, np.array(list(map(int, line.split(','))), dtype=int)))
return data
我使用numpy
来计算两个列表之间的欧式距离:
def euclidean_distance(x, z):
return np.linalg.norm(x-z)
在此之后,我像这样计算欧几里德距离:
for data in testing_data:
for data2 in training_data:
dist = euclidean_distance(data, data2)
我的问题是这段代码运行非常缓慢,大约需要10分钟才能完成。我该如何改善呢?我想念什么?
我必须在另一个算法中使用距离,因此速度非常重要。
答案 0 :(得分:1)
您可以使用sklearn.metrics.pairwise_distances
,它可以将工作分配到所有核心。 Parallel construction of a distance matrix讨论了同一主题,并对pdist
,cdist
和pairwise_distances
如果我正确理解了您的示例,则需要训练集中的每个样本与测试集中的每个样本之间的距离。为此,您可以使用:
dist = pairwise_distances(training_data, testing_data, n_jobs=-1)