/ / python calcula la matriz de distancia a partir de los datos del diccionario - python, análisis de conglomerados, distancia, vinculación, pdist

matriz de distancia de cálculo python a partir de datos del diccionario - python, análisis de clúster, distancia, enlace, pdist

Quiero calcular una matriz de distancia a partir de datos de un diccionario como los siguientes:

y = {"a": ndarray1, "b": ndarry2, "c": ndarry3}

El valor de cada clave ("a", "b", "c") es un np.ndarry con diferente tamaño. Y tengo un dist() Función que puede calcular la distancia entre y["a"] y y["b"] mediante dist(y["a"], y["b"]).

Para que la matriz de distancia resultante sea:

+----------------------------------------------------------------+
|                a        b                        c             |
+----------------------------------------------------------------+
| a  | 0        mydist(ndarrya1, ndarray)  mydist(ndarray1, ndarray3) |
| b  |          0                        mydist(ndarray2, ndarray3) |
| c  |                                   0                        |
+----------------------------------------------------------------+

Yo he tratado scipy.spatial.distance.pdist con pdist(y, mydist), pero se equivocó al decir que:

[X] = _copy_arrays_if_base_present([_convert_to_double(X)])
File "/usr/local/lib/python2.7/dist-packages/scipy/spatial/distance.py", line 113, in _convert_to_double
X = X.astype(np.double)
TypeError: float() argument must be a string or a number

¿Alguien puede decirme cómo implementar este pdist por mí mismo? Quiero usar el resultado pdist para un mayor agrupamiento jerárquico.

Respuestas

1 para la respuesta № 1

La primera parte de tu pregunta es bastante clara. La segunda parte, no sé qué estás preguntando. ¿Por qué necesitas volver a implementar? scipy.spatial.distance.pdist, Pensé que ya tienes un dist() Función para calcular la distancia por pares.

Para obtener la distancia de pares, cuando ya tienes un dist() Función para calcularlo:

In [69]:
D={"a":some_value,"b":some_value,"c":some_value}
In [70]:
import itertools
In [71]:
list(itertools.combinations(D,2))
Out[71]:
[("a", "c"), ("a", "b"), ("c", "b")]

In [72]: #this is what you need:
[dist(*map(D.get, item)) for item in itertools.combinations(D,2)]