जवाबों:
के बाद से अन्य प्रश्न यह एक जो के बारे में पूछने पर पुनः निर्देशित किया जा रहा है asanyarray
या अन्य सरणी निर्माण दिनचर्या , यह शायद उनमें से प्रत्येक क्या करता है का एक संक्षिप्त सारांश बनाना उचित है।
अंतर मुख्य रूप से इनपुट को वापस लाने के बारे में है, जब कॉपी के रूप में एक नया सरणी बनाने का विरोध किया जाता है।
array
विकल्पों की एक विस्तृत विविधता प्रदान करता है (अन्य कार्यों में से अधिकांश इसके चारों ओर पतले रैपर हैं), जब कॉपी करने के लिए निर्धारित करने के लिए झंडे सहित। एक पूर्ण विवरण डॉक्स के रूप में लंबे समय तक ले जाएगा ( ऐरे क्रिएशन देखें , लेकिन संक्षेप में, यहां कुछ उदाहरण हैं:
मान लें a
कि एक है ndarray
, और m
एक है matrix
, और वे दोनों में से एक dtype
है float32
:
np.array(a)
और np.array(m)
दोनों को कॉपी करेगा, क्योंकि यह डिफ़ॉल्ट व्यवहार है।np.array(a, copy=False)
और np.array(m, copy=False)
कॉपी करेगा m
लेकिन नहीं a
, क्योंकि m
ए नहीं है ndarray
।np.array(a, copy=False, subok=True)
और np.array(m, copy=False, subok=True)
न तो नकल करेगा, क्योंकि m
एक है matrix
, जो एक उपवर्ग है ndarray
।np.array(a, dtype=int, copy=False, subok=True)
दोनों की नकल करेगा, क्योंकि dtype
संगत नहीं है।array
जब नकल होती है तो उस नियंत्रण के आसपास अन्य कार्यों में से अधिकांश पतली आवरण होते हैं :
asarray
: यदि यह एक संगत ndarray
( copy=False
) है तो इनपुट को बिना लाइसेंस के वापस लौटा दिया जाएगा ।asanyarray
: यदि यह एक संगत ndarray
या उपवर्ग matrix
( जैसे copy=False
, subok=True
) है , तो इनपुट को बिना लाइसेंस के वापस लौटा दिया जाएगा ।ascontiguousarray
: इनपुट uncopied लौटा दी जाएगी iff यह एक संगत है ndarray
सन्निहित सी क्रम में ( copy=False
, order='C')
।asfortranarray
: यदि यह ndarray
सन्निहित फोरट्रान ऑर्डर ( copy=False
? order='F'
) में एक संगत है , तो इनपुट को बंद नहीं किया जाएगा ।require
: यदि इनपुट निर्दिष्ट आवश्यकताओं स्ट्रिंग के साथ संगत है तो इनपुट को बिना लाइसेंस के वापस कर दिया जाएगा।copy
: इनपुट हमेशा कॉपी किया जाता है।fromiter
: इनपुट को एक पुनरावृत्त के रूप में माना जाता है (इसलिए, जैसे, आप इट्रेटर के तत्वों से एक सरणी का निर्माण कर सकते हैं, बजाय इटरेटर के एक object
सरणी के साथ); हमेशा कॉपी किया गया।सुविधा कार्य भी हैं, जैसे asarray_chkfinite
(समान नियम कॉपी करना asarray
, लेकिन ValueError
यदि कोई मान nan
या inf
मान हो तो), और उपवर्गों के लिए matrix
या विशेष मामलों जैसे रिकॉर्ड सरणियों के लिए, और निश्चित रूप से वास्तविक ndarray
कंस्ट्रक्टर (जो आपको एक सरणी बनाने देता है) बफर के ऊपर से बाहर)।
की परिभाषाasarray
है:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
तो यह पसंद है array
, सिवाय इसके कम विकल्प हैं, और copy=False
। array
है copy=True
डिफ़ॉल्ट रूप से।
मुख्य अंतर यह है कि array
(डिफ़ॉल्ट रूप से) ऑब्जेक्ट की एक प्रतिलिपि asarray
बनाएगा , जबकि आवश्यक नहीं होगा।
array([1, 2, 3])
या asarray([1, 2, 3])
?
[1, 2, 3]
एक पायथन सूची है, इसलिए डेटा की एक प्रतिलिपि बनाने के लिए आवश्यक है ndarary
। इसलिए np.array
इसके बजाय सीधे उपयोग करें np.asarray
जिससे copy=False
पैरामीटर को भेजा जाएगा np.array
। copy=False
यदि एक प्रति के रूप में यह इस मामले में हो सकता है किया जाना चाहिए नजरअंदाज कर दिया है। यदि आप %timeit
IPython में दो बेंचमार्क का उपयोग करते हैं , तो आपको छोटी सूचियों के लिए अंतर दिखाई देगा, लेकिन यह शायद ही मायने रखता है जो आप बड़ी सूचियों के लिए उपयोग करते हैं।
np.asanyarray
?
asarray
हमेशा एक रिटर्न ndarray
। अगर यह है कि क्या यह पारित किया गया था asanyarray
की एक उपवर्ग वापस आ जाएगी ndarray
। उदाहरण के लिए, np.matrix
एक उप का एक उपवर्ग है ndarray
। तो np.asanyarray(np.matrix(...))
वही मैट्रिक्स लौटाता है, जबकि np.asarray(np.matrix(...))
मैट्रिक्स को एक में परिवर्तित करता है ndarray
।
अंतर को इस उदाहरण द्वारा प्रदर्शित किया जा सकता है:
एक मैट्रिक्स उत्पन्न करें
>>> A = numpy.matrix(numpy.ones((3,3)))
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
numpy.array
संशोधित करने के लिए उपयोग करें A
। काम नहीं करता क्योंकि आप एक प्रति संशोधित कर रहे हैं
>>> numpy.array(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
numpy.asarray
संशोधित करने के लिए उपयोग करें A
। यह काम किया क्योंकि आप A
खुद को संशोधित कर रहे हैं
>>> numpy.asarray(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.]])
उम्मीद है की यह मदद करेगा!
मतभेदों के दस्तावेज में काफी स्पष्ट रूप से उल्लेख कर रहे हैं array
और asarray
। मतभेद तर्क सूची में निहित हैं और इसलिए उन मापदंडों के आधार पर फ़ंक्शन की कार्रवाई।
फ़ंक्शन परिभाषाएँ हैं:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
तथा
numpy.asarray(a, dtype=None, order=None)
निम्नलिखित तर्क वे हैं जिन्हें दस्तावेज़ में उल्लिखित किया जा सकता है array
और नहीं भी asarray
:
प्रतिलिपि: बूल, वैकल्पिक यदि सत्य (डिफ़ॉल्ट) है, तो ऑब्जेक्ट की प्रतिलिपि बनाई गई है । अन्यथा, एक प्रति केवल तभी बनाई जाएगी जब
__array__
कोई प्रति लौटाता है, यदि obj एक नेस्टेड अनुक्रम है, या यदि किसी अन्य आवश्यकताओं (dtype, आदेश, आदि) को संतुष्ट करने के लिए एक प्रति की आवश्यकता है।सबोक: बूल, वैकल्पिक यदि सही है, तो उप-कक्षाएं पास-थ्रू हो जाएंगी , अन्यथा लौटे सरणी को बेस-क्लास सरणी (डिफ़ॉल्ट) होने के लिए मजबूर किया जाएगा।
ndmin: int, ऐच्छिक न्यूनतम आयामों की न्यूनतम संख्या निर्दिष्ट करता है जिसके परिणामस्वरूप सरणी होनी चाहिए। इस आवश्यकता को पूरा करने के लिए ओनों को पहले से आकार दिया जाएगा।
यहाँ एक सरल उदाहरण है जो अंतर प्रदर्शित कर सकता है।
मुख्य अंतर यह है कि सरणी मूल डेटा की एक प्रतिलिपि बनाएगी और विभिन्न ऑब्जेक्ट का उपयोग करके हम मूल सरणी में डेटा को संशोधित कर सकते हैं।
import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)
सरणी (ए) की सामग्री, अछूती रहती है, और फिर भी, हम मूल सरणी में सामग्री को संशोधित किए बिना किसी अन्य ऑब्जेक्ट का उपयोग करके डेटा पर कोई भी ऑपरेशन कर सकते हैं।
asarray(x)
के समान ही array(x, copy=False)
का प्रयोग करें asarray(x)
जब आप यह सुनिश्चित करें कि चाहते हैं x
एक सरणी हो जाएगा से पहले किसी भी अन्य कार्यों किया जाता है। यदि x
पहले से ही एक सरणी है तो कोई भी नकल नहीं की जाएगी। यह एक निरर्थक प्रदर्शन हिट का कारण नहीं होगा।
यहां एक फ़ंक्शन का एक उदाहरण है जो यह सुनिश्चित करता है कि x
पहले एक सरणी में परिवर्तित हो जाए।
def mysum(x):
return np.asarray(x).sum()