2016-08-05 2 views
0

Я пытаюсь определить евклидову расстояние для моих документов от их центроидов. Размеры этих двух массивов (points и centers) удовлетворяют требованиям размеров XA и XB для scipy.spatial.distance.cdist, но я не знаю, почему я получаю ниже ValueError.Евклидово расстояние между элементами в двух разных матрицах?

Мой код:

import pandas as pd, numpy as np 
from scipy.spatial.distance import cdist 
from sklearn.feature_extraction.text import TfidfVectorizer 
from sklearn.cluster import KMeans 

corpus = pd.Series(["bye bye brutal good bye apple banana orange", "bye bye hello apple banana", "corn wheat apple banana goodbye cookie brutal", "fruit cake banana apple bye sweet sweet"]) 
X = vectorizer.fit_transform(corpus) 
model = Kmeans(n_clusters = 2) 
model.fit(X) 
centers = model.cluster_centroids_ 

cdist(X, centers) 

Это ошибка, я получаю:

ValueError: setting an array element with a sequence. 

С scipy.spatial.distance.cdist «s документации:

Parameters: XA: ndarray 
    An Ma by n array of Ma original observations in an n-dimensional space 
      XB: ndarray 
    An Mb by n array of Mb original observations in an n-dimensional space 
... 

Мои X и centersnumpy массивы, безусловно, удовлетворить эти мерные условия для cdist, правильно? Что мне не хватает?

ответ

2

Просто небольшое изменение, что вам нужно сделать:

cdist(X.toarray(),centers) 

Поскольку X является объектом типа scipy.sparse.csr.csr_matrix не будет непосредственно принимать в качестве действительного входа в SciPy функции. Метод toarray() преобразует его в допустимый массив numpy

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