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?

War es hilfreich?

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
scroll top