सुन्न में सरणी और सरणी के बीच अंतर क्या है?


240

ndarrayऔर arrayNumpy में क्या अंतर है ? और मुझे संख्यात्मक स्रोत कोड में क्रियान्वयन कहां मिल सकता है?

जवाबों:


220

numpy.array एक बनाने के लिए सिर्फ एक सुविधा समारोह है ndarray ; यह स्वयं एक वर्ग नहीं है।

आप एक सरणी का उपयोग करके भी बना सकते हैं numpy.ndarray, लेकिन यह अनुशंसित तरीका नहीं है। के डॉकस्ट्रिंग से numpy.ndarray:

ऐरे का उपयोग करके निर्माण किया जाना चाहिए array, zerosया empty... यहां दिए गए पैरामीटर ndarray(...)एक सरणी को तत्काल बनाने के लिए निम्न-स्तरीय विधि ( ) का संदर्भ देते हैं ।

कार्यान्वयन का अधिकांश मांस सी कोड में है, यहां मल्टीएरे में है , लेकिन आप ndarray रिक्त स्थान को देखना शुरू कर सकते हैं:

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py


1
मुझे लगता है कि array_getarray () में array () कोर / src / multarray / methods.c में लागू किया गया है।
flxb

6
यह आपको काट सकता है यदि आप भूल जाते हैं कि np.arrayएक वर्ग नहीं है, जैसा कि मैं अक्सर करता हूं। x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
स्टीव एल

4
अभी भी कोई सुराग नहीं है कि ndarray के उपयोग से क्यों बचना चाहिए? Coz यह निम्न-स्तर है?
गेब्रियलचू

@flxb: नहीं, array_getarrayका कार्यान्वयन है numpy.ndarray.__array__। कम से कम, वर्तमान कार्यान्वयन में numpy.arrayशुरू होता है _array_fromobject
user2357112

2
तो क्यों अनुशंसित नहीं है?
NoName


31

Numpy.array और numpy.ndarray के बीच अंतर दिखाने के लिए उदाहरण कोड की कुछ पंक्तियाँ

वार्म अप स्टेप: एक सूची का निर्माण करें

a = [1,2,3]

प्रकार की जाँच करें

print(type(a))

तुम्हे मिल जाएगा

<class 'list'>

Np.array का उपयोग करके एक सरणी (किसी सूची से) का निर्माण करें

a = np.array(a)

या, आप सीधे वार्म अप कदम को छोड़ सकते हैं

a = np.array([1,2,3])

प्रकार की जाँच करें

print(type(a))

तुम्हे मिल जाएगा

<class 'numpy.ndarray'>

जो आपको बताता है कि सुन्न सरणी का प्रकार numpy.ndarray है

आप टाइप करके भी देख सकते हैं

isinstance(a, (np.ndarray))

और आपको मिलेगा

True

या तो निम्न दो पंक्तियों में आपको एक त्रुटि संदेश मिलेगा

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

numpy.ndarray()एक वर्ग है, जबकि numpy.array()बनाने के लिए एक विधि / कार्य हैndarray

यदि आप ndarrayकक्षा से एक सरणी बनाना चाहते हैं, तो आप इसे दो तरीकों से उद्धृत कर सकते हैं:

1- का उपयोग array(), zeros()या empty()विधियों: सरणी, शून्य या खाली (नीचे भी देखें अनुभाग देखें) का उपयोग करके एरे का निर्माण किया जाना चाहिए। यहां दिए गए पैरामीटर ndarray(…)एक सरणी को तत्काल करने के लिए निम्न-स्तरीय विधि ( ) का संदर्भ देते हैं ।

2- ndarrayकक्षा से सीधे: सरणी का उपयोग करने के दो तरीके हैं __new__: यदि बफर कोई नहीं है, तो केवल आकृति, dtype और क्रम का उपयोग किया जाता है। यदि बफर बफर इंटरफेस को उजागर करने वाली वस्तु है, तो सभी खोजशब्दों की व्याख्या की जाती है।

नीचे दिया गया उदाहरण एक यादृच्छिक सरणी देता है क्योंकि हमने बफर मान प्रदान नहीं किया है:

np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None)

array([[ -1.13698227e+002,   4.25087011e-303],
       [  2.88528414e-306,   3.27025015e-309]])         #random

एक अन्य उदाहरण बफर ऑब्जेक्ट को उदाहरण के लिए असाइन करना है:

>>> np.ndarray((2,), buffer=np.array([1,2,3]),
...            offset=np.int_().itemsize,
...            dtype=int) # offset = 1*itemsize, i.e. skip first element
array([2, 3])

ऊपर के उदाहरण से हम देखते हैं कि हम "बफर" को एक सूची नहीं दे सकते हैं और हमें बफर के लिए ndarray ऑब्जेक्ट को वापस करने के लिए numpy.array () का उपयोग करना होगा

निष्कर्ष: numpy.array()यदि आप एक numpy.ndarray()वस्तु बनाना चाहते हैं तो उपयोग करें "


0

मुझे लगता है कि np.array()आप केवल सी बना सकते हैं जैसे कि आप आदेश का उल्लेख करते हैं, जब आप जांच करते np.isfortran()हैं कि यह गलत है। लेकिन np.ndarrray()जब आप आदेश को निर्दिष्ट करते हैं तो यह दिए गए आदेश के आधार पर बनाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.