这是我需要做的:我有一个引用数组和N个数组的列表与之比较。比较是一个简单的欧几里得距离。
随着N的增加,进行这些比较所需的时间也增加,当我将PC设置为N = 10000000时,程序崩溃。
我想知道我有哪些选择可以使这些比较更快。我可以使用其他编码方法来实现吗?集群适合我要完成的任务吗?
简而言之,我想在不到一秒钟的时间内将超过一百万个数组与一个参考数组进行比较。我该怎么办?
我的代码:
import numpy as np
import time
def distance(v1, v2):
return np.sum(np.square(v1 - v2))
reference_vector = np.random.rand(1, 128)[0]
n_to_compare = [10**x for x in range(2, 7)]
for n in n_to_compare[:]:
random_vectors = np.random.rand(n, 128)
dist = np.zeros((n, 1))
t1 = time.time()
for k, e in enumerate(random_vectors):
dist[k] = distance(e, reference_vector)
print('N = {}, time taken: {} secs.'.format(n, time.time() - t1))
输出:
N = 100, time taken: 0.01488184928894043 secs.
N = 1000, time taken: 0.010502099990844727 secs.
N = 10000, time taken: 0.10730242729187012 secs.
N = 100000, time taken: 1.1830437183380127 secs.
N = 1000000, time taken: 11.653045654296875 secs.