Python NumPy Быстрые Расчеты Массива в 2D Массив (матрица) - PullRequest
0 голосов
/ 03 июля 2018

У меня есть сценарий использования, в котором у меня есть набор из нескольких тысяч координат, и я хочу векторизовать их и превратить в расстояния. Я хочу сделать это таким образом, чтобы я в итоге получил двумерный массив, фактически матрицу, то есть n x n, что дает мне норму между входными точками. Я знаю, что у меня будет куча нулей по диагонали, и это нормально. Я хочу обработать это как можно быстрее.

В настоящее время мой метод состоит в том, чтобы взять массив массивов координат x, y, z - это строка, и в списке, тем не менее, загружается много элементов из файла, например 5000 строк.

В настоящее время я просто перебираю список координат следующим образом:

for i in range(n):
    for j in range(n):
        dist[i,j] = round(numpy.linalg.norm(coords[i] - coords[j]), 3)

dist - настройка массива numpy с numpy.zeros((n,n)), где я уже получил значение n, являющееся длиной списка координат.

Я знаю, что должен быть более быстрый способ использования numpy в этом наборе данных, конечно, делая координаты массивом, я просто не уверен, как это сделать эффективно. Одна из причин, по которой я хочу это сделать, заключается в том, что я собираюсь использовать маску таблицы истинности для обработки данных. Спасибо!

1 Ответ

0 голосов
/ 04 июля 2018

Таким образом, решение так же просто, как упомянуто выше, просто импортируйте scipy и используйте:

distances = scipy.spatial.distance.cdist(coords, coords)

Полученный массив представляет собой массив евклидовых норм n by n.

...