Вот что мне нужно сделать: у меня есть один массив ссылок и список из N массивов для сравнения с этим.Сравнение представляет собой простое евклидово расстояние.
Время, затрачиваемое на эти сравнения, увеличивается с увеличением N, и с моим ПК, когда я устанавливаю 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.