¿Cómo convertir una matriz numpy regular para grabar una matriz?

Leí en una secuencia de números con

np.array(f.read().split(),dtype=np.float64) 

Luego lo convierto a una matriz np.reshape() usando np.reshape() .

Después de esto, ¿cómo convertir arr a una matriz de registro? He intentado (algo como) lo siguiente:

 filename = 'unstructured-file.txt' nfields = 3 names = ('r','g','b') with open(filename,'r') as f: arr = np.array(f.read().split(),dtype=np.float64) arr = arr.reshape(-1,nfields) out = np.array(arr,dtype=zip(names,['float64']*length(names)) 

pero dice TypeError: expected a readable buffer object

¿Alguna sugerencia?

Edición: Lo principal que quiero hacer es nombrar mis columnas.

En lugar de

 out = np.array(arr,dtype=zip(names,['float64']*length(names)) 

Si uso esto,

 out = np.core.records.fromrecords(arr.reshape(-1,nfields),names=','.join(names)) 

Puedo usar out['r'] y así sucesivamente, pero out.dtype.names es None`. Que esta pasando?

Edit2

El archivo no estructurado parece

  Some text More text 100 1.000000E-01 46 -1.891701E+04 1.702921E+02 -2.323660E+04 4.547841E+03 -2.778444E+04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.149862E+04 1.753467E+02 3.410277E+03 -1.034898E+05 2.778692E+04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.492281E+04 0.000000E+00 0.000000E+00 0.000000E+00 9.000000E+01 9.000000E+01 9.000000E+01 0.000000E+00 -4.774939E-01 0.000000E+00 0.000000E+00 0.000000E+00 -2.243495E-01 3.513048E-01 -2.678782E-01 3.513048E-01 -7.155493E-01 5.690034E-01 -2.678782E-01 5.690034E-01 -4.783123E-01 2.461974E+01 0.000000E+00 0.000000E+00 0.000000E+00 2.461974E+01 0.000000E+00 0.000000E+00 0.000000E+00 2.461974E+01 200 2.000000E-01 46 -1.891815E+04 1.421984E+02 -2.424678E+04 5.199451E+03 -2.944623E+04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.174561E+04 1.274613E+02 -6.004790E+01 -1.139308E+05 2.944807E+04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.445855E+04 0.000000E+00 0.000000E+00 0.000000E+00 9.000000E+01 9.000000E+01 9.000000E+01 0.000000E+00 7.785923E-01 0.000000E+00 0.000000E+00 0.000000E+00 8.123304E-01 3.023486E-01 -5.891595E-01 3.023486E-01 -8.560144E-02 -3.830618E-01 -5.891595E-01 -3.830618E-01 1.608437E+00 2.436174E+01 0.000000E+00 0.000000E+00 0.000000E+00 2.436174E+01 0.000000E+00 0.000000E+00 0.000000E+00 2.436174E+01 

Para convertir una matriz numpy plana en una matriz estructurada, use la view :

 import numpy as np filename = 'unstructured-file.txt' nfields = 3 names = ('r','g','b') with open(filename,'r') as f: arr = np.array(f.read().split(),dtype=np.float64) arr = arr.reshape(-1,nfields) out = arr.view(dtype=zip(names,['float64']*len(names))).copy()