/ / शब्दकोश डेटा से अजगर गणना दूरी मैट्रिक्स - अजगर, क्लस्टर-विश्लेषण, दूरी, लिंकेज, pdist

शब्दकोश डेटा से पायथन गणना दूरी मैट्रिक्स - पायथन, क्लस्टर-विश्लेषण, दूरी, जुड़ाव, पीडीआईस्ट

मैं निम्नलिखित जैसे शब्दकोश डेटा से एक दूरी मैट्रिक्स की गणना करना चाहता हूं:

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

प्रत्येक कुंजी का मूल्य ("ए", "बी", "सी") अलग-अलग आकार के साथ एक np.ndarry है। और मुझे ए dist() फ़ंक्शन जो बीच की दूरी की गणना कर सकता है y["a"] तथा y["b"] के माध्यम से dist(y["a"], y["b"]).

ताकि परिणामस्वरूप दूरी मैट्रिक्स हो:

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

मैं प्रयास कर चुका हूं scipy.spatial.distance.pdist साथ में pdist(y, mydist), लेकिन एक त्रुटि यह कहते हुए मिली:

[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

क्या कोई मुझे बता सकता है कि इस पीडी को कैसे लागू किया जाए? मैं आगे पदानुक्रमित क्लस्टरिंग के लिए pdist परिणाम का उपयोग करना चाहता हूं।

उत्तर:

उत्तर № 1 के लिए 1

आपके प्रश्न का पहला भाग काफी स्पष्ट है। दूसरा भाग मैं नहीं जानता कि आप क्या पूछ रहे हैं। आपको फिर से लागू करने की आवश्यकता क्यों है scipy.spatial.distance.pdist, मुझे लगा कि आपके पास पहले से ही एक है dist() कार्य जोड़ी दूरी की गणना करने के लिए।

जोड़ीदार दूरी पाने के लिए, जब आपके पास पहले से ही ए dist() यह गणना करने के लिए कार्य:

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)]