में उत्तरदायित्व Count how many different values a list takes in Mathematica का उत्तर तैयार करते समय मैं DeleteDuplicates
और Tally
दोनों में अस्थिरता (बेहतर अवधि की कमी के लिए) में आया, जो मुझे समझ में नहीं आया।DeleteDuplicates और Tally
पहले विचार करें:
a = {2.2000000000000005, 2.2, 2.1999999999999999};
a // InputForm
[email protected] // InputForm
[email protected] // InputForm
[email protected] // InputForm
{2.2000000000000006`, 2.2, 2.1999999999999997`}
{2.2000000000000006`, 2.2, 2.1999999999999997`}
{2.1999999999999997`, 2.2, 2.2000000000000006`}
{{2.2000000000000006`, 3}}
यह व्यवहार है जैसा कि मैंने प्रत्येक मामले में की उम्मीद। Tally
मामूली संख्यात्मक मतभेदों की भरपाई करता है और प्रत्येक तत्व को बराबर के रूप में देखता है। Union
और DeleteDuplicates
सभी तत्वों को अद्वितीय के रूप में देखें। (Tally
का यह व्यवहार मेरी जानकारी के लिए दस्तावेज नहीं है, लेकिन मैं इससे पहले कि यह का इस्तेमाल किया है।)
अब, इस जटिलता पर विचार करें:
a = {11/5, 2.2000000000000005, 2.2, 2.1999999999999997};
a // InputForm
[email protected] // InputForm
[email protected] // InputForm
[email protected] // InputForm
{11/5, 2.2000000000000006, 2.2, 2.1999999999999997}
{11/5, 2.2000000000000006, 2.2}
{2.1999999999999997, 2.2, 11/5, 2.2000000000000006}
{{11/5, 1}, {2.2000000000000006, 1}, {2.2, 2}}
Union
का आउटपुट अनुमानित है, लेकिन DeleteDuplicates
औरदोनों के परिणामआश्चर्यजनक हैं।
क्यों
DeleteDuplicates
अचानक देखता2.1999999999999997
डुप्लीकेट के रूप में समाप्त हो?Tally
अचानक2.2000000000000006
और2.2
को अलग के रूप में क्यों देखते हैं, जब यह पहले नहीं था?
एक संबंधित बिंदु के रूप में, यह देखा जा सकता है कि पैक सरणियों Tally
प्रभावित करते हैं:
a = {2.2000000000000005, 2.2, 2.1999999999999999};
a // InputForm
[email protected] // InputForm
{2.2000000000000006, 2.2, 2.1999999999999997}
{{2.2000000000000006`, 3}}
a = Developer`[email protected];
a // InputForm
[email protected] // InputForm
{2.2000000000000006, 2.2, 2.1999999999999997}
{{2.2000000000000006`, 1}, {2.2, 2}}
धन्यवाद। –
+1 - बहुत अच्छी चर्चा, धन्यवाद! व्यावहारिक दृष्टिकोण से, मैं अभी भी शर्त लगाता हूं कि 'समान' 'समान 'की तुलना में कई और मामलों को संतोषजनक बनाएगा। एक बेहतर परिभाषित समस्या कुछ कठोर ग्रिड (डिब्बे के सेट) के आधार पर समकक्ष वर्गों को परिभाषित करना होगा और यदि वे एक ही "बिन" में समाप्त होते हैं तो दो संख्याओं के बराबर मानें। यह विज्ञापन है, लेकिन अच्छी तरह से परिभाषित है, और शायद कई समस्याओं के लिए अनुचित नहीं है। –
@ लियोनीड और डब्ल्यूआरच, 'ऑर्डर [#, # 2] === 0 और' समानक-एंड-आई-रीली-मीन-इट-टाइम-टाइम के लिए सबसे अच्छा विकल्प है? –