2012-01-02 3 views
0

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

Большое спасибо!

+1

Для разреженных расстояний, см [pairwise_distances] (http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.metrics. pairwise.pairwise_distances.html) в scikit-learn. С scipy.spatial.distance, вам нужно будет, например, cdist (X.todense(), Y.todense(), метрика = ...) – denis

ответ

4

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

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

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

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

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

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

Есть many kinds разреженных матриц, некоторые словаря на основе (см комментарий). Вы можете определить строки разреженную матрицу из списка, как это:

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

Хороший ответ. Я также хотел бы отметить, что вы можете использовать массивы numpy, которые могут быть полезны в других случаях. – aganders3

+0

Я думаю, что он означает векторы с отсутствием большинства элементов. Они могут быть представлены в виде словарей: {1: 5, 2: 4, 101: 15}. Теперь, как вы вычисляете расстояние? – ugoren

+0

@ugoren: Я только что отредактировал свой ответ. –

Смежные вопросы