LINUX.ORG.RU

Оптимизация вычисления большой матрицы расстояний

 


0

3

Добрый вечер! У меня есть объемный массив (около 30 тысяч элементов), и метрика между любыми элементами. Мне необходимо посчитать матрицу расстояний (достаточно треугольной), даже если это займет много памяти.

Сейчас используется следующий код:

distance_matrix = np.ndarray((len(foo),len(foo)))
for i, bar1 in enumerate(foo):
    for j, bar2 in enumerate(foo[i+1:]):
        distance_matrix[i,j] = hight_level_python_function(bar1, bar2)

И работает он очень долго, даже если разбивать матрицу на несколько, и считать каждую в отдельном процессе. На низкоуровневых языках переписать метрику необоснованно трудозатратно. Кеш на hight_level_python_function уже есть.

Как быть?



Последнее исправление: helium (всего исправлений: 2)

А сколько времени считается табличка для 1024 элементов ? (т.е. ((2*10)**2)/2=«пол_лимона» вызовов )

anonymous
()
Ответ на: комментарий от reprimand

Что должна доказывать эта ссылочка? Большинство по ней как раз высказывается в пользу того, что Фортран немного быстрее. Другая часть говорит о некорректности сравнения. А диванные аналитики это те, кто предлагают всё переписать на Си. Попробуй переписать на Си матричное умножение в numpy. Даже такой тормоз как Матлаб делает матричное умножение со скоростью Си по причине того, что и он, и Си, и numpy используют одну и ту же фортрановскую библиотеку.

Bell
()
Ответ на: комментарий от ZERG

Я имел ввиду всего 1000 элементов на один словарь, а не миллион :)

blexey ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.