2011-11-21 33 views
20

iterable और array_like ऑब्जेक्ट के बीच क्या अंतर है जो Numpy का उपयोग करता है?शब्दावली: पायथन और न्यूम्पी - `iterable` बनाम 'array_like`

iterable और array_like दोनों पाइथन दस्तावेज़ीकरण में अक्सर देखे जाते हैं और वे कुछ समान गुण साझा करते हैं।

मैं समझता हूं कि इस संदर्भ में array_like ऑब्जेक्ट को Numpy प्रसारण जैसे ऑपरेशन का समर्थन करना चाहिए, हालांकि Numpy सरणी क्षेत्र भी पुन: प्रयोज्य है। क्या यह कहना सही है कि array_likeiterable का विस्तार (या सुपर-सेट?) है?

उत्तर

23

शब्द "array-like" वास्तव में केवल न्यूमपी में उपयोग किया जाता है और यह किसी भी चीज को संदर्भित करता है जिसे numpy.array() पर पहले पैरामीटर के रूप में पारित किया जा सकता है ताकि एक सरणी बना सके।

शब्द "iterable" मानक पायथन शब्दावली है और इसे किसी भी चीज़ को संदर्भित किया जाता है जिसे उदाहरण के लिए पुनरावृत्त किया जा सकता है (उदाहरण के लिए for x in iterable का उपयोग करना)।

स्केलर प्रकारों के अपवाद के साथ अधिकांश सरणी जैसी वस्तुएं पुन: प्रयोज्य हैं।

कई पुनरावृत्तियों सरणी जैसी नहीं हैं - उदाहरण के लिए आप numpy.array() का उपयोग कर जनरेटर अभिव्यक्ति से NumPy सरणी नहीं बना सकते हैं। (आपको numpy.fromiter() का उपयोग करना होगा। फिर भी, जनरेटर अभिव्यक्ति NumPy दस्तावेज़ की शब्दावली में "सरणी जैसी" नहीं है।)

+0

महान:

यहाँ "NumPy-चर्चा" मेलिंग सूची से पुष्टि है। यह इसे साफ़ करता है, विशेष रूप से 'सरणी जैसी' और 'numpy.array()' के पहले तर्क के बीच का लिंक। – dtlussier

+0

"सभी सरणी जैसी वस्तुएं पुन: प्रयोज्य हैं" - यह सही नहीं है। '' 'Int''' प्रकार का स्केलर मान सरणी जैसा है और' '' numpy.array() '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – wombatonfire

+0

@wombatonfire Yup, यह सच है। यहां तक ​​कि वास्तविक 0-डी सरणी भी पुनरावृत्त नहीं की जा सकती हैं, जबकि वे स्पष्ट रूप से "सरणी जैसी" हैं। वे भी सरणी हैं। –

3

जबकि स्वेन के उत्तर का पहला भाग सही है, मुझे पसंद है उस सरणी जैसी वस्तुओं को जोड़ने के लिए जरूरी नहीं होना चाहिए।

उदाहरण के लिए, मेरी विशेष स्थिति में मुझे numpy.rint() फ़ंक्शन का उपयोग करने में रुचि थी जो int प्रकार के स्केलर के साथ सरणी जैसी वस्तुओं को स्वीकार करता है। वे पुनरावृत्त नहीं हैं, लेकिन वे स्वीकार किए जाते हैं। आप int से numpy.array() पर भी पास कर सकते हैं, इसलिए सरणी जैसी हैं। धन्यवाद - https://mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html

संबंधित मुद्दे