Rename the fields from a flexible-datatype ndarray or recarray. Nested fields are supported. Parameters ---------- base : ndarray Input array whose fields must be modified. namemapper : dictionary Dictionary mapping old field names to their new version.
(base, namemapper)
| 606 | |
| 607 | @array_function_dispatch(_rename_fields_dispatcher) |
| 608 | def rename_fields(base, namemapper): |
| 609 | """ |
| 610 | Rename the fields from a flexible-datatype ndarray or recarray. |
| 611 | |
| 612 | Nested fields are supported. |
| 613 | |
| 614 | Parameters |
| 615 | ---------- |
| 616 | base : ndarray |
| 617 | Input array whose fields must be modified. |
| 618 | namemapper : dictionary |
| 619 | Dictionary mapping old field names to their new version. |
| 620 | |
| 621 | Examples |
| 622 | -------- |
| 623 | >>> import numpy as np |
| 624 | >>> from numpy.lib import recfunctions as rfn |
| 625 | >>> a = np.array([(1, (2, [3.0, 30.])), (4, (5, [6.0, 60.]))], |
| 626 | ... dtype=[('a', int),('b', [('ba', float), ('bb', (float, 2))])]) |
| 627 | >>> rfn.rename_fields(a, {'a':'A', 'bb':'BB'}) |
| 628 | array([(1, (2., [ 3., 30.])), (4, (5., [ 6., 60.]))], |
| 629 | dtype=[('A', '<i8'), ('b', [('ba', '<f8'), ('BB', '<f8', (2,))])]) |
| 630 | |
| 631 | """ |
| 632 | def _recursive_rename_fields(ndtype, namemapper): |
| 633 | newdtype = [] |
| 634 | for name in ndtype.names: |
| 635 | newname = namemapper.get(name, name) |
| 636 | current = ndtype[name] |
| 637 | if current.names is not None: |
| 638 | newdtype.append( |
| 639 | (newname, _recursive_rename_fields(current, namemapper)) |
| 640 | ) |
| 641 | else: |
| 642 | newdtype.append((newname, current)) |
| 643 | return newdtype |
| 644 | newdtype = _recursive_rename_fields(base.dtype, namemapper) |
| 645 | return base.view(newdtype) |
| 646 | |
| 647 | |
| 648 | def _append_fields_dispatcher(base, names, data, dtypes=None, |
searching dependent graphs…