के बिना एक numpy सरणी monotonic बनाओ मेरे पास 1 डी सरणी मान है जो मोनोटोनिक (चलो कहने में कमी) माना जाता है, लेकिन यादृच्छिक क्षेत्र हैं जहां सूचकांक के साथ मूल्य बढ़ता है।पाइथन लूप
मुझे एक सरणी की आवश्यकता है जहां प्रत्येक क्षेत्र को सीधे इसके पहले मान के साथ प्रतिस्थापित किया गया हो, जिससे परिणामी सरणी क्रमबद्ध हो।
तो अगर दिया सरणी है:
a = np.array([10.0, 9.5, 8.0, 7.2, 7.8, 8.0, 7.0, 5.0, 3.0, 2.5, 3.0, 2.0])
मैं परिणाम
b = np.array([10.0, 9.5, 8.0, 7.2, 7.2, 7.2, 7.0, 5.0, 3.0, 2.5, 2.5, 2.0])
होना चाहता हूँ यहाँ एक चित्रमय प्रतिनिधित्व है:
मुझे पता है कि यह कैसे प्राप्त करने के लिए पाइथन लूप के साथ, लेकिन NumPy के साथ ऐसा करने का कोई तरीका है मशीनरी? स्पष्टता के लिए
अजगर कोड:
b = np.array(a)
for i in range(1, b.size):
if b[i] > b[i-1]:
b[i] = b[i-1]
"बिना लूप के" चिंता क्यों? चाहे आप एक स्पष्ट लूप लिखते हों, या लूप कुछ मॉड्यूल/पैकेज से आयातित फ़ंक्शन में किया जाता है, यह अभी भी वहां है। ऐसे मूल्यों की श्रृंखला में कुछ करने के बहुत सारे तरीके नहीं हैं जिनमें लूप शामिल न हो, जब तक कि आप पूरे लूप को संचालन के रैखिक अनुक्रम में पूरी तरह से अनलॉक नहीं करना चाहते हैं, जो कई अलग-अलग कारणों से बदसूरत है - पोर्टेबिलिटी, लचीलापन , कोड आकार, आदि ... – twalberg
@twalberg मुझे लगता है कि NumPy का उपयोग करते समय पाइथन लूप से बचने के लिए आम बात है, क्योंकि सी में लागू कार्यों के भीतर पुनरावृत्ति को सामान्य रूप से किया जाता है, तो प्रदर्शन आमतौर पर सुधारता है। यह अक्सर होता है कि कोड है छोटा क्लीनर –
बड़े डेटा सेट के साथ काम करते समय यह एक वैध बिंदु है। हालांकि, इस उदाहरण में (और किसी भी संकेत के बिना कि "असली" समस्या परिमाण की बड़ी संख्या है), मुझे लगता है कि पाइथन सूची को डेटा संरचना में परिवर्तित करने के ऊपरी हिस्से में सी लूप काम कर सकता है, और उसके बाद इसे वापस परिवर्तित कर सकता है उपयुक्त पायथन डेटा संरचना, शायद एक दर्जन प्रविष्टियों को फिर से शुरू करने के लिए केवल पाइथन लूप का उपयोग न करने से किसी भी संभावित लाभ को व्यक्त करता है ... यह सत्यापित करने के लिए बेहतर है कि लूप केवल इसे खत्म करने की कोशिश करने से पहले एक समस्या है ... – twalberg