रिकॉर्ड्स/recarrays इस फाइल
रिकार्ड सरणी रिकार्ड सरणियों गुण के रूप में संरचित सरणियों के क्षेत्र का पर्दाफाश से
https://github.com/numpy/numpy/blob/master/numpy/core/records.py
कुछ प्रासंगिक उद्धरण में लागू किया जाता है। पुनरावृत्ति एक मानक सरणी के लगभग समान है (जो पहले से ही फ़ील्ड नामित है) सबसे बड़ा अंतर यह है कि यह विशेषता-फ़ील्ड का उपयोग फ़ील्ड खोजने के लिए कर सकता है और इसे रिकॉर्ड का उपयोग करके बनाया गया है।
recarray
ndarray
का एक उपवर्ग (उसी तरह matrix
और masked arrays
हैं कि में) है। लेकिन ध्यान दें कि यह कन्स्ट्रक्टर np.array
से अलग है। यह np.empty(size, dtype)
की तरह है।
class recarray(ndarray):
"""Construct an ndarray that allows field access using attributes.
This constructor can be compared to ``empty``: it creates a new record
array but does not fill it with data.
विशेषता व्यवहार के रूप में अद्वितीय क्षेत्र लागू करने के लिए मुख्य कार्य __getattribute__
है (__getitem__
लागू करता अनुक्रमण):
def __getattribute__(self, attr):
# See if ndarray has this attr, and return it if so. (note that this
# means a field with the same name as an ndarray attr cannot be
# accessed by attribute).
try:
return object.__getattribute__(self, attr)
except AttributeError: # attr must be a fieldname
pass
# look for a field with this name
fielddict = ndarray.__getattribute__(self, 'dtype').fields
try:
res = fielddict[attr][:2]
except (TypeError, KeyError):
raise AttributeError("recarray has no attribute %s" % attr)
obj = self.getfield(*res)
# At this point obj will always be a recarray, since (see
# PyArray_GetField) the type of obj is inherited. Next, if obj.dtype is
# non-structured, convert it to an ndarray. If obj is structured leave
# it as a recarray, but make sure to convert to the same dtype.type (eg
# to preserve numpy.record type if present), since nested structured
# fields do not inherit type.
if obj.dtype.fields:
return obj.view(dtype=(self.dtype.type, obj.dtype.fields))
else:
return obj.view(ndarray)
यह पहली बार यह एक नियमित विशेषता पाने के लिए कोशिश करता है - .shape
तरह बातें, .strides
, .data
, साथ ही सभी विधियों (.sum
, .reshape
, आदि)। यह विफल होने के बाद dtype
फ़ील्ड नामों में नाम दिखता है। तो यह वास्तव में कुछ परिभाषित एक्सेस विधियों के साथ एक संरचित सरणी है।
सबसे अच्छा मैं record array
और recarray
बता सकता हूं।
एक और फ़ाइल इतिहास उपयोगिताओं के
https://github.com/numpy/numpy/blob/master/numpy/lib/recfunctions.py
संग्रह के बारे में कुछ संरचित सरणियों हेरफेर करने के लिए पता चलता है। इनमें से अधिकतर कार्यों को शुरुआत में जॉन हंटर द्वारा matplotlib के लिए कार्यान्वित किया गया था। उन्हें सुविधा के लिए फिर से लिखा और विस्तारित किया गया है।
इस फ़ाइल में कार्यों में से कई के साथ समाप्त:
if asrecarray:
output = output.view(recarray)
तथ्य यह है कि आप एक सरणी लौट सकते हैं के रूप में recarray
देखने से पता चलता है कि कैसे 'पतली' इस परत है।
numpy
का एक लंबा इतिहास है, और कई स्वतंत्र परियोजनाओं को विलय करता है। मेरी धारणा यह है कि recarray
एक पुराना विचार है, और संरचित सरणी वर्तमान कार्यान्वयन जो सामान्यीकृत dtype
पर बनाया गया है। recarrays
किसी भी नए विकास की तुलना में सुविधा और पिछड़े संगतता के लिए रखा जाना प्रतीत होता है। लेकिन मुझे github
फ़ाइल इतिहास का अध्ययन करना होगा, और किसी भी हालिया मुद्दे/पुल अनुरोध सुनिश्चित करने के लिए होगा।
[संरचित सरणी (उर्फ "रिकॉर्ड सरणी")] (http://docs.scipy.org/doc/numpy/user/basics.rec.html) –
मैंने सवाल स्पष्ट किया है, @ अश्विनी चौधरी - धन्यवाद । – xnx
दस्तावेज़ों पर अंतर के स्पष्टीकरण के बारे में क्या अस्पष्ट है? recarray 'arr.foo' रूप में फ़ील्ड तक पहुंच का समर्थन करता है, जबकि सामान्य संरचित सरणी केवल 'arr [' foo ']' प्रारूप के माध्यम से पहुंच का समर्थन करती हैं, लेकिन यह देखने के लिए तेज़ है। मैं कभी भी "संरचित सरणी" "रिकॉर्ड एरे" नहीं कहूंगा, ठीक है क्योंकि यह "रिकर्अर्स" के साथ इतना संभावित भ्रम पैदा करता है। – zehnpaard