numpy loadtxt sola línea / fila como lista

Tengo un archivo de datos con una sola línea como:

1.2 2.1 3.2 

Usé numpy versión 1.3.0 loadtxt para cargarlo

  a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True) 

La salida fue un flotante en lugar de una matriz como

  a = 1.2 

Supongo que sería:

  a = array([1.2]) 

Si leo un archivo con varias líneas, está funcionando.

Lo que está sucediendo es que cuando se carga la matriz se obtiene una monodimensional. Cuando lo desembala, obtiene un conjunto de números, es decir, una matriz sin dimensión. Esto se debe a que cuando desempaqueta una matriz, disminuye su número de dimensión en uno. Comenzando con una matriz monodimensional, se reduce a un número simple.

Si prueba el tipo de a, no es un flotante, sino un numpy.float, que tiene todas las propiedades de una matriz, pero una tupla vacía como forma. Así que es una matriz, simplemente no se representa como una.

Si lo que necesita es una matriz monodimensional con un solo elemento, la forma más sencilla es remodelar su matriz antes de descomprimirla:

 #note the reshape function to transform the shape a,b,c = loadtxt("text.txt").reshape((-1,1)) 

Esto le da el resultado esperado. Lo que está sucediendo es que lo reconfiguramos en una matriz bidimensional, de modo que cuando lo desempaquete, el número de dimensiones se reduce a uno.

EDITAR:

Si necesita que funcione normalmente para una matriz multidimensional y que se mantenga unidimensional cuando lea una matriz unidimensional, creo que la mejor manera es leer normalmente con loadtxt y remodelar las matrices en una segunda fase, convirtiéndolas en monodimensionales si son números puros

 a,b,c = loadtxt("text.txt",unpack=True) for e in [a,b,c] e.reshape(e.shape if e.shape else (-1,)) 

La forma sencilla sin utilizar remodelación es, para encasillar explícitamente la lista

  a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True) a,b,c = (a,b,c) if usi.shape else ([a], [b], [c]) 

¡Esto funciona más rápido que la remodelación!

Simplemente use el parámetro inbuit loadtxt ndmin de la numpy.

 a,b,c=np.loadtxt('data.dat',ndmin=2,unpack=True) 

salida

 a=[1.2]