Records/recarrays sind in
implementiert
https://github.com/numpy/numpy/blob/master/numpy/core/records.py
Einige relevante Zitate aus dieser Datei
Nehmen Arrays Arrays Nehmen Sie die Felder von strukturierten Arrays als Eigenschaften aus. Das Neuarray ist fast identisch mit einem Standardarray (das benannte Felder bereits unterstützt) Der größte Unterschied ist, dass es Attributsuche verwenden kann, um die Felder zu finden, und es wird unter Verwendung eines Datensatzes erstellt.
recarray
ist eine Unterklasse von ndarray
(in der gleichen Art und Weise, dass matrix
und masked arrays
sind). Beachten Sie jedoch, dass der Konstruktor sich von np.array
unterscheidet. Es ist mehr wie 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.
Die Schlüsselfunktion für das eindeutige Feld als Attribut Verhalten Umsetzung __getattribute__
ist (__getitem__
implementiert Indizierung):
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)
Es versucht es zuerst ein reguläres Attribut zu bekommen - Dinge wie .shape
, .strides
, .data
sowie alle Methoden (.sum
, .reshape
, usw.). Bei fehlgeschlagener Suche wird dann der Name in den Feldnamen dtype
nachgeschlagen. Es ist also wirklich nur ein strukturiertes Array mit einigen neu definierten Zugriffsmethoden.
So gut kann ich sagen record array
und recarray
sind die gleichen.
andere Datei zeigt etwas von der Geschichte
https://github.com/numpy/numpy/blob/master/numpy/lib/recfunctions.py
Sammlung von Werkzeugen strukturierte Arrays zu manipulieren. Die meisten dieser Funktionen wurden ursprünglich von John Hunter für Matplotlib implementiert. Sie wurden umgeschrieben und zur Vereinfachung erweitert.
Viele der Funktionen in dieser Datei endet mit:
if asrecarray:
output = output.view(recarray)
Die Tatsache, dass Sie ein Array zurückgeben kann als recarray
Ansicht zeigt, wie ‚dünn‘ ist diese Schicht.
numpy
hat eine lange Geschichte und führt mehrere unabhängige Projekte zusammen. Mein Eindruck ist, dass recarray
eine ältere Idee ist, und strukturierte Arrays die aktuelle Implementierung, die auf einem verallgemeinerten dtype
aufgebaut ist. recarrays
scheinen für Bequemlichkeit und Rückwärtskompatibilität als jede neue Entwicklung gehalten werden. Aber ich müsste die github
Dateihistorie studieren, und alle letzten Probleme/Pull-Anfragen, um sicher zu sein.
[Strukturierte Arrays (auch bekannt als "Record Arrays")] (http://docs.scipy.org/doc/numpy/user/basics.rec.html) –
Ich habe die Frage geklärt, @Ashwini Chaudhary - danke . – xnx
Was ist unklar an der Erklärung des Unterschieds in den Dokumenten? recarray unterstützt den Zugriff auf Felder in 'arr.foo' Form, während normal strukturierte Arrays den Zugriff nur über' arr ['foo'] 'Format unterstützen, aber schneller nachschlagen können. Ich würde niemals "strukturierte Arrays" "Record Arrays" nennen, gerade weil es so viel potentielle Verwirrung mit "Recarrays" verursacht. – zehnpaard