Adding a field to a structured numpy array

后端 未结 2 1903
时光取名叫无心
时光取名叫无心 2020-11-30 10:59

What is the cleanest way to add a field to a structured numpy array? Can it be done destructively, or is it necessary to create a new array and copy over the existing field

相关标签:
2条回答
  • 2020-11-30 11:40

    If you're using numpy 1.3, there's also numpy.lib.recfunctions.append_fields().

    For many installations, you'll need to import numpy.lib.recfunctions to access this. import numpy will not allow one to see the numpy.lib.recfunctions

    0 讨论(0)
  • 2020-11-30 11:41
    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
    
    0 讨论(0)
提交回复
热议问题