Как сделать расчеты с большими массивами быстрее? - PullRequest
0 голосов
/ 27 февраля 2019

Вот что мне нужно сделать: у меня есть один массив ссылок и список из 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...