Pergunta

O que é a forma mais limpa para adicionar um campo para uma matriz numpy estruturado? isso pode ser feito destrutiva, ou é necessário para criar uma nova matriz e copiar os campos existentes? São o conteúdo de cada campo armazenado de forma contígua na memória para que essa cópia pode ser feito de forma eficiente?

Foi útil?

Solução

Se você estiver usando numpy 1.3, há também numpy.lib.recfunctions.append_fields ().

Para muitas instalações, você precisa import numpy.lib.recfunctions acessar este. import numpy não permitirá um para ver o numpy.lib.recfunctions

Outras dicas

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top