Ein Feld hinzufügen einem strukturierten Array numpy
Frage
Was ist der sauberste Weg, um ein Feld zu einem strukturierten numpy Array hinzufügen? Kann es destruktiv erfolgen, oder ist es notwendig, ein neues Array und kopieren Sie über die vorhandenen Felder zu schaffen? Sind die Inhalte der einzelnen Felder aneinander angrenzend in einem Speicher gespeichert, so dass ein solches Kopieren effizient durchgeführt werden?
Lösung
Wenn Sie mit numpy 1.3, gibt es auch numpy.lib.recfunctions.append_fields ().
Für viele Installationen, müssen Sie import numpy.lib.recfunctions
diese zuzugreifen. import numpy
wird nicht zulassen, dass man die numpy.lib.recfunctions
sehen
Andere Tipps
import numpy
def add_field(a, descr):
"""Return a new array that is like "a", but has additional fields.
Arguments:
a -- a structured numpy array
descr -- a numpy type description of the new fields
The contents of "a" are copied over to the appropriate fields in
the new array, whereas the new fields are uninitialized. The
arguments are not modified.
>>> sa = numpy.array([(1, 'Foo'), (2, 'Bar')], \
dtype=[('id', int), ('name', 'S3')])
>>> sa.dtype.descr == numpy.dtype([('id', int), ('name', 'S3')])
True
>>> sb = add_field(sa, [('score', float)])
>>> sb.dtype.descr == numpy.dtype([('id', int), ('name', 'S3'), \
('score', float)])
True
>>> numpy.all(sa['id'] == sb['id'])
True
>>> numpy.all(sa['name'] == sb['name'])
True
"""
if a.dtype.fields is None:
raise ValueError, "`A' must be a structured numpy array"
b = numpy.empty(a.shape, dtype=a.dtype.descr + descr)
for name in a.dtype.names:
b[name] = a[name]
return b
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow