Me encuentro analizando muchos archivos de datos (generalmente en un archivo .csv o similar) usando el lector csv y un ciclo for para iterar sobre cada línea. Los datos suelen ser una tabla de flotantes, por ejemplo.Manera pitónica de poblar la matriz numpy
reader = csv.reader(open('somefile.csv'))
header = reader.next()
res_list = [list() for i in header]
for line in reader:
for i in range(len(line)):
res_list[i].append(float(line[i]))
result_dict = dict(zip(header,res_list)) #so we can refer by column title
Ésta es una forma aceptable para poblar lo que obtener cada columna como una lista separada sin embargo, yo prefiero que el contenedor de datos por defecto para las listas de artículos (y listas anidadas) ser matrices numpy, ya que 99 veces 100 los números se bombean en varios scripts/funciones de procesamiento y tener el poder de las listas numpy me hace la vida más fácil.
numpy append(arr, item)
no se agrega en el lugar y, por lo tanto, requeriría volver a crear matrices para cada punto de la tabla (que es lento e innecesario). También podría iterar sobre la lista de columnas de datos y envolverlas en una matriz después de que haya terminado (que es lo que he estado haciendo), pero a veces no es tan claro sobre cuando He terminado analizar el archivo y puede necesitar agregar cosas a la lista más adelante en la línea de todos modos.
Me preguntaba si hay alguna forma menos pesada de la caldera (para usar la frase usada "pythonic") para procesar tablas de datos de una manera similar, o para poblar matrices (donde el contenedor subyacente es una lista) dinámicamente y sin copiar matrices todo el tiempo.
(En otra nota: es un poco molesto que en general las personas usen columnas para organizar datos pero csv
lee en filas si el lector incorporó un argumento read_column (sí, sé que no sería súper eficiente), creo muchas personas se evitaría tener código de placa de la caldera como el anterior para analizar un archivo de datos CSV)
He pensado en esto antes, pero tiene algunos problemas, en particular, se requiere que la longitud del registro sea la misma por la formación. Aunque mi pequeño fragmento asume lo mismo, no siempre ocurre (por ejemplo, filas vacías para indicar interrupciones entre las ráfagas de recopilación de datos). – crasic
Si lo entiendo correctamente, vea editar. –