पहली तुलना अर्थपूर्ण नहीं है, दूसरा सार्थक है।
>>> type(numpy.int16)
type
>>> numpy.int16 > numpy.float32 # I'm using Python 3
TypeError: unorderable types: type() > type()
अजगर 3 इस तुलना तुरंत विफल रहता है के बाद से वहाँ type
उदाहरण के लिए कोई परिभाषित आदेश है:
numpy.int16 > numpy.float32
के साथ हम दो type
वस्तुओं की तुलना कर रहे हैं। पायथन 2 में, एक बूलियन लौटा दिया जाता है लेकिन स्थिरता के लिए भरोसा नहीं किया जा सकता है (यह स्मृति पते या अन्य कार्यान्वयन-स्तर की सामग्री की तुलना करने के लिए वापस आ जाता है)।
दूसरी तुलना पाइथन 3 में काम करता है, और यह लगातार काम करता है (पायथन 2 में समान)। इसका कारण यह है कि अब हम dtype
उदाहरणों तुलना कर रहे हैं:
>>> type(numpy.dtype('int16'))
numpy.dtype
>>> numpy.dtype('int16') > numpy.dtype('float32')
False
>>> numpy.dtype('int32') < numpy.dtype('|S10')
False
>>> numpy.dtype('int32') < numpy.dtype('|S11')
True
इस आदेश के पीछे तर्क क्या है?
dtype
उदाहरणों के अनुसार आदेश दिया जाता है कि किसी को (सुरक्षित रूप से) दूसरे को कास्ट किया जा सकता है या नहीं। एक प्रकार से कम है यदि यह सुरक्षित रूप से उस प्रकार के पर जा सकता है।
तुलना ऑपरेटर के कार्यान्वयन के लिए, descriptor.c देखें; विशेष रूप से arraydescr_richcompare
फ़ंक्शन पर।
switch (cmp_op) {
case Py_LT:
if (!PyArray_EquivTypes(self, new) && PyArray_CanCastTo(self, new)) {
result = Py_True;
}
else {
result = Py_False;
}
break;
अनिवार्य रूप से, NumPy सिर्फ जांच होती है कि दो प्रकार के होते हैं (i) बराबर नहीं, और (ii) कि पहले प्रकार दूसरे प्रकार के साथ ढाले जा सकता है:
यहाँ क्या करने के लिए <
ऑपरेटर नक्शे है ।
यह कार्यक्षमता भी np.can_cast
रूप NumPy एपीआई में सामने आ रहा है:
स्रोत
2015-04-18 14:00:07
संयोग से, मैं खोज और 'np.find_common_type' का उपयोग कर समाप्त हो गया लेकिन मैं अभी भी यहाँ क्या चल रहा था में दिलचस्पी रखता हूँ। धन्यवाद! – farenorth
मैं विंडोज पर 'numpy' 1.9.2 का उपयोग कर रहा हूं, और दोनों तुलना 'झूठी' वापस आती हैं। जैसा कि नीचे दिए गए उत्तर में है, यह अर्थहीन है, और इसे पायथन 3 में हटा दिया गया है। – MattDMo