Добавление поля в структурированный массив NumPy - PullRequest
22 голосов
/ 29 июля 2009

Какой самый простой способ добавить поле в структурированный массив numpy? Это может быть сделано деструктивно, или необходимо создать новый массив и скопировать существующие поля? Содержится ли содержимое каждого поля непрерывно в памяти, чтобы такое копирование могло быть выполнено эффективно?

Ответы [ 2 ]

19 голосов
/ 30 июля 2009

Если вы используете numpy 1.3, есть также numpy.lib.recfunctions.append_fields ().

Для многих установок вам потребуется import numpy.lib.recfunctions для доступа к этому. import numpy не позволит увидеть numpy.lib.recfunctions

6 голосов
/ 29 июля 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...