अब how to parse a string for magnitude and physical unit का प्रश्न सुलझाया गया है, अगला सवाल यह है कि, इन दोनों को एक साथ पैक करने के बारे में सबसे अच्छा कैसे होना चाहिए, एक तरफ बहुत अधिक प्रदर्शन नहीं होता है लेकिन दूसरी तरफ एक इकाई सत्यापन जोड़ता है ।परिमाण और भौतिक इकाइयों को पाइपोनिक रूप से कैसे जोड़ना है?
मेरा मतलब स्पष्ट करने के लिए, उदाहरण के रूप में दो वेग v = 5 m/s
और u = 10 mph
उदाहरण लें। previous question पहले से ही SI units पर सबकुछ परिवर्तित करने का ख्याल रखता है (इसलिए के कारण आप crash another Mars mission नहीं करेंगे)। तो आंतरिक रूप से एक होगा उदाहरण के लिए एक tuple v = (5, m/s)
और u = (4.4704, m/s)
और आउटपुट रूटीन आउटपुट के लिए पसंदीदा इकाइयों का उपयोग करने का ख्याल रखेगा। दोनों पर यूनिट-संगत संचालन लागू करते समय, उदा। इसके वर्ग, या उनके वर्गों को घटाना, वैध हैं, v - 1/u
जैसे अन्य पूर्ण और पूर्ण बकवास हैं। लेकिन यह सर्वोत्तम कैसे लागू किया जाना चाहिए? कुछ संभावनाएं जिन्हें मैंने अब तक माना है:
- मत करो। चूंकि आंतरिक रूप से केवल एसआई इकाइयों का उपयोग किया जाता है, इसलिए स्पष्ट हो सकता है कि कौन सी इकाइयां लागू होती हैं। लेकिन सूत्रों की उपेक्षा यह है कि सूत्र अधिक जटिल हो जाते हैं यदि सूत्र अधिक जटिल हो जाते हैं
- सबक्लास
tuple
और यूनिट स्थिरता जांच तैयार करने वाले सभी वैध संचालन को ओवरराइड करें। मजेदार लगता है ... - ,
v = 5*unit.m/unit.s
के आयाम समय (अर्थपूर्ण कार्य) केsympy.core.mul.Mul
एस के रूप में मानों को स्टोर करें। मुझे इसके शानदार प्रदर्शन की उम्मीद नहीं है, साथ ही मुझे यह भी जांचना होगा कि ऑपरेशन का परिणाम अभी भीmagnitude * unit
के रूप में है या नहीं। numpy.array
का उपयोग अतिरिक्तsympy.physics.unit.Unit
प्रविष्टि के साथ करें, जो पहले से ही तत्व के संचालन को लागू करता है। यह अभी भी बाद में (तथ्य यह है कि जैसेm+m=2m
भी इलाज किया जा करने की आवश्यकता होगी ...)- उपवर्ग
tuple
के बजायnumpy.array
एक मैनुअल इकाई संगतता जांच की आवश्यकता होगी, कॉल करने से पहले ऑपरेटरों इकाई संगतता जांच prepending ओवरराइडsuper
- सरणी पर ऑपरेटर इकाई के बिना। हो सकता है कि कुछ__getattribute__
जादू इस आसान बनाने में कर सकता है के बाद से सभी वैध संचालन पहले से ही दोनों परिमाण और इकाई के लिए लागू किया जाता है ...
इन समाधानों अच्छा/pythonic में से एक है? या फिर दूसरा तरीका क्या है? क्या एक लाइब्रेरी जो इसका इलाज करती है वह पहले से मौजूद है?
संपादित करें ध्यान दें कि यह स्केलर मानों तक सीमित नहीं होना चाहिए; वैक्टर, मैट्रिक्स (शायद भी sympy.Symbol
रों) भी
अच्छा लगता है (त्रुटि संदेश मुझे लगता है कि एसआई इकाई शक्तियों के बारे में है)। क्या यह सरणी का इलाज भी कर सकता है? –
क्या आपके पास सूचियां हैं?'श्रेणी में टी के लिए [मिलीग्राम (टी, 'एस') * मिलीग्राम (70, 'किमी/एच') (0)] –
मैं वैक्टर और मैट्रिस के बारे में सोच रहा था, उदा। 3 डी वेग वैक्टर, और 'मिलीग्राम ([। 5,0,3],' एम/एस ') जैसे कुछ' शायद '[मिलीग्राम (.5,' एम/एस '), एमजी (0,' से बेहतर दिखेंगे। एम/एस '), एमजी (3,' एम/एस ')] ' –