Python - разреженные векторы / расчет расстояния - PullRequest
0 голосов
/ 03 января 2012

Я ищу динамически растущие векторы в Python, так как я не знаю их длину заранее. Кроме того, я хотел бы рассчитать расстояния между этими разреженными векторами, предпочтительно используя функции расстояния в scipy.spatial.distance (хотя любые другие предложения приветствуются). Есть идеи, как это сделать? (Первоначально он не должен быть эффективным.)

Заранее большое спасибо!

1 Ответ

4 голосов
/ 03 января 2012

Вы можете использовать обычные списки Python (которые являются динамическими) в качестве векторов. Вот тривиальный пример.

from scipy.spatial.distance import sqeuclidean
a = [1,2,3]
b = [0,0,0]
print sqeuclidean(a,b) # 14

В соответствии с предложением aganders3, обратите внимание, что при необходимости вы также можете использовать пустые массивы:

import numpy
a = numpy.array([1,2,3])

Если бы разреженная часть вашего вопроса была решающей, я бы использовал для этого scipy - в ней есть поддержка разреженных матриц. Вы можете определить матрицу 1xn и использовать ее как вектор. Это работает (параметр - это размер матрицы, по умолчанию заполненный нулями):

sqeuclidean(scipy.sparse.coo_matrix((1,3)),scipy.sparse.coo_matrix((1,3))) # 0

Существует много видов разреженных матриц, основанных на некоторых словарях (см. Комментарий). Вы можете определить матрицу разреженных строк из списка следующим образом:

scipy.sparse.csr_matrix([1,2,3])
...