मैं निम्नलिखित जैसे शब्दकोश डेटा से एक दूरी मैट्रिक्स की गणना करना चाहता हूं:
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)]