2009-07-29 15 views
20

संरचित numpy सरणी में फ़ील्ड जोड़ने का सबसे साफ तरीका क्या है? क्या यह विनाशकारी तरीके से किया जा सकता है, या क्या मौजूदा सरणी पर एक नई सरणी बनाना और प्रतिलिपि बनाना आवश्यक है? क्या प्रत्येक फ़ील्ड की सामग्री स्मृति में संगत रूप से संग्रहीत होती है ताकि ऐसी प्रतिलिपि कुशलता से की जा सके?एक संरचित numpy सरणी में एक फ़ील्ड जोड़ना

उत्तर

19

आप numpy 1.3 उपयोग कर रहे हैं, वहाँ भी numpy.lib.recfunctions.append_fields है()।

कई इंस्टॉलेशन के लिए, आपको इसे एक्सेस करने के लिए import numpy.lib.recfunctions की आवश्यकता होगी। import numpynumpy.lib.recfunctions

6
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 
+1

को डुप्लिकेट करने से बचने के लिए संशोधित किया जा सकता है? (देखें [यह सवाल] (http://stackoverflow.com/q/39965994/974555)) – gerrit

संबंधित मुद्दे