columnas Numpy matrices estructuradas han nombrado:
import numpy as np
a=range(100)
A = np.array(zip(*[iter(a)]*2),dtype=[('C1','int32'),('C2','int64')])
print(A.dtype)
# [('C1', '<i4'), ('C2', '<i8')]
puede acceder a las columnas por nombre así:
print(A['C1'])
# [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
# 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98]
Tenga en cuenta que el uso de np.array
con zip
causa NumPy para construir una matriz de un temporal lista de tuplas Las listas de tuplas de Python usan mucha más memoria que las matrices equivalentes de NumPy. Entonces, si su matriz es muy grande, es posible que no desee utilizar zip
.
En cambio, dada una matriz NumPy A
, se podría utilizar ravel()
hacer A
una 1D matriz, y luego usar view
para convertirlo en una matriz estructurada, y luego usar astype
para convertir las columnas al tipo deseado:
a = range(100)
A = array(a).reshape(len(a)/2, 2)
A = A.ravel().view([('col1','i8'),('col2','i8'),]).astype([('col1','i4'),('col2','i8'),])
print(A[:5])
# array([(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)],
# dtype=[('col1', '<i4'), ('col2', '<i8')])
print(A.dtype)
# dtype([('col1', '<i4'), ('col2', '<i8')])
Su mejor opción es envolver la matriz (en realidad 2) y una lista de nombres en una clase contenedor y usar eso. – Keith
@Keith: ¿te refieres a alguna clase en particular (soy nuevo en numpy)? –
No, me refiero a uno que crees. Luego delega las operaciones a sus matrices de los métodos que defina en su nueva clase. Defina también un método '__str__' para imprimir sus matrices con encabezados. – Keith