/ / पाइथन में अन्य सूची के अनुसार सॉर्टिंग सूची काम नहीं कर रही है जब दूसरी सूची में numpy arrays - पायथन, पायथन-2.7, सॉर्टिंग, numpy

पाइथन में अन्य सूची के अनुसार सॉर्टिंग सूची काम नहीं कर रही है जब दूसरी सूची में numpy arrays - पायथन, पायथन-2.7, सॉर्टिंग, numpy

सूची बी के आधार पर सूची को सॉर्ट करने का मानक तरीका, उन्हें एक साथ ज़िप करना और क्रमबद्ध, जैसे उपयोग करना है

sorted(zip(b,a))

हालांकि, यदि बी में दो तत्व बराबर हैं, तो यह स्वचालित रूप से एक के अनुसार क्रमबद्ध करने की कोशिश करेगा, और कभी-कभी समस्याएं उत्पन्न होती हैं। उदाहरण के लिए विचार करें

import numpy as np
a=[np.array([4,5]),np.array([3,4])]
b=[1,1]
e=zip(b,a)
sorted(e)

यह त्रुटि का कारण बनता है

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

तो जब बी में दो तत्व बराबर होते हैं, तो ऐसा लगता है कि एक के अनुसार क्रमबद्ध करने के लिए आगे बढ़ना प्रतीत होता है, लेकिन चूंकि इसमें numpy arrays शामिल हैं, सॉर्टिंग एल्गोरिदम शिकायत करते हैं जब यह उनकी तुलना करने की कोशिश करता है।

वैसे भी, क्रमबद्ध इस अपेक्षित व्यवहार है? किसी भी मामले में, मैं बस बी के अनुसार क्रमबद्ध करना चाहता हूँ। यदि दो तत्व बराबर हैं, तो आदेश कोई फर्क नहीं पड़ता। एक सॉर्टिंग एल्गोरिदम लिखने के बिना इसे ठीक करने के तरीके पर कोई विचार?

उत्तर:

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

त्रुटि दिखाती है क्योंकि numpy.array नहीं है तुलनीय सॉर्टिंग की भावना में, यानी यह एक वापस नहीं करता है True या False मान (लेकिन एक अन्य बूलियन सरणी) दो सारणी की तुलना करते समय, जो अलग है सूची सूचीबद्ध करता है.

यदि आप केवल तदनुसार सॉर्ट करना चाहते हैं b, एक महत्वपूर्ण कार्य प्रदान करते हैं sorted:

sorted(e, key=lambda x: x[0])
# [(1, array([4, 5])), (1, array([3, 4]))]