मिनीमास की सरणी में महत्वपूर्ण डेटा को कैसे सॉर्ट करें?

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

y = [-0.0002, -0.00058, -0.28, -0.0008, -0.25,-0.0006,-0.00004,-0.26]
output = [-0.28, -0.25, -0.26, -0.0002, -0.00058,-0.0008, -0.0006,-0.00004]

किसी भी तरह, मैं सूचकांक चोटी के आदेश को संरक्षित करना चाहता हूं।

0

1 उत्तर

तो आपके लिए y में क्रम 1/99 के अंतर से अधिक महत्वपूर्ण है (आप 1/99 को अपनी पसंदीदा चीज़ों पर ट्यून कर सकते हैं)।

[~,order]=sort(y+(1:length(y))/99)
output=y(order)

मैं क्रमबद्ध करने से पहले वेक्टर [1/99,2/99,3/99,4/99 ...] y में जोड़ता हूं। तब मैं केवल उस तरीके को बरकरार रखता हूं जो संशोधित वाई को सॉर्ट किया जाएगा। और मैं इसे अनमोडिफाइड वाई पर लागू करता हूं।

यदि y बहुत लंबा है तो काम नहीं करेगा। इसके लिए, आप मेरे सुझाव को दूसरी बार दोहराना चाह सकते हैं:

[~,order]=sort(y+(1:length(y))/99)
y=y(order)
[~,order]=sort(y+(1:length(y))/99)
output=y(order)
0
जोड़ा
कृपया इसे समझाएं। मैं वाई + (1: लंबाई (वाई))/99 के उद्देश्य को समझ नहीं सका।
जोड़ा लेखक User1551892, स्रोत
मेरे पास सरणी में 3000 तत्व हैं और आपका सुझाया गया दृष्टिकोण काम नहीं कर रहा है।
जोड़ा लेखक User1551892, स्रोत
यहां तक ​​कि लंबा संस्करण भी? आप [~, ऑर्डर] = सॉर्ट (राउंड (वाई * 100)/100 + (1: लम्बाई (वाई)) * 1e-7 भी कोशिश कर सकते हैं)
जोड़ा लेखक user2987828, स्रोत