multiplicar - transpuesta de una matriz en python numpy
Volcar una matriz NumPy en un archivo csv (9)
Como ya se mencionó, la mejor manera de volcar la matriz en un archivo CSV es mediante el uso del método .savetxt(...)
. Sin embargo, hay ciertas cosas que debemos saber para hacerlo correctamente.
Por ejemplo, si tiene una matriz dtype = np.int32
con dtype = np.int32
como
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
y quiere guardar usando savetxt
como
np.savetxt(''values.csv'', narr, delimiter=",")
Almacenará los datos en formato exponencial de punto flotante como
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Deberá cambiar el formato utilizando un parámetro llamado fmt
como
np.savetxt(''values.csv'', narr, fmt="%d", delimiter=",")
para almacenar datos en su formato original
Guardar datos en formato comprimido gz
Además, savetxt
se puede usar para almacenar datos en formato comprimido .gz
, lo que puede ser útil al transferir datos a través de la red.
Solo necesitamos cambiar la extensión del archivo ya que .gz
y numpy se encargarán de todo automáticamente
np.savetxt(''values.gz'', narr, fmt="%d", delimiter=",")
Espero eso ayude
¿Hay una manera de volcar una matriz NumPy en un archivo CSV? Tengo una matriz NumPy 2D y necesito volcarla en un formato legible.
En Python usamos el módulo csv.writer () para escribir datos en archivos csv. Este módulo es similar al módulo csv.reader ().
import csv
person = [[''SN'', ''Person'', ''DOB''],
[''1'', ''John'', ''18/1/1997''],
[''2'', ''Marie'',''19/2/1998''],
[''3'', ''Simon'',''20/3/1999''],
[''4'', ''Erik'', ''21/4/2000''],
[''5'', ''Ana'', ''22/5/2001'']]
csv.register_dialect(''myDialect'',
delimiter = ''|'',
quoting=csv.QUOTE_NONE,
skipinitialspace=True)
with open(''dob.csv'', ''w'') as f:
writer = csv.writer(f, dialect=''myDialect'')
for row in person:
writer.writerow(row)
f.close()
Un delimitador es una cadena utilizada para separar campos. El valor predeterminado es coma (,).
Es fácil y rápido con pandas.
import pandas as pd
df = pd.DataFrame(np_array)
df.to_csv("file_path.csv")
Escribir arrays de registros como archivos CSV con encabezados requiere un poco más de trabajo.
Este ejemplo lee un archivo CSV con el encabezado en la primera línea, luego escribe el mismo archivo.
import numpy as np
# Write an example CSV file with headers on first line
with open(''example.csv'', ''w'') as fp:
fp.write(''''''/
col1,col2,col3
1,100.1,string1
2,222.2,second string
'''''')
# Read it as a Numpy record array
ar = np.recfromcsv(''example.csv'')
print(repr(ar))
# rec.array([(1, 100.1, ''string1''), (2, 222.2, ''second string'')],
# dtype=[(''col1'', ''<i4''), (''col2'', ''<f8''), (''col3'', ''S13'')])
# Write as a CSV file with headers on first line
with open(''out.csv'', ''w'') as fp:
fp.write('',''.join(ar.dtype.names) + ''/n'')
np.savetxt(fp, ar, ''%s'', '','')
Tenga en cuenta que este ejemplo no considera cadenas con comas. Para considerar citas para datos no numéricos, use el paquete csv
:
import csv
with open(''out2.csv'', ''wb'') as fp:
writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
writer.writerow(ar.dtype.names)
writer.writerows(ar.tolist())
Si desea guardar su matriz numpy (por ejemplo, your_array = np.array([[1,2],[3,4]])
) en una celda, puede convertirla primero con your_array.tolist()
.
Luego guárdelo de la manera normal en una celda, con delimiter='';''
y la celda en el archivo csv se verá así [[1, 2], [2, 4]]
Entonces podrías restaurar tu matriz de esta manera: your_array = np.array(ast.literal_eval(cell_string))
También puedes hacerlo con python puro sin utilizar ningún módulo.
# format as a block of csv text to do whatever you want
csv_rows = ["{},{}".format(i, j) for i, j in array]
csv_text = "/n".join(csv_rows)
# write it to a file
with open(''file.csv'', ''w'') as f:
f.write(csv_text)
tofile
es una función conveniente para hacer esto:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile(''foo.csv'',sep='','',format=''%10.5f'')
La página del manual tiene algunas notas útiles:
Esta es una función de conveniencia para el almacenamiento rápido de datos de matriz. La información sobre el endianness y la precisión se pierde, por lo que este método no es una buena opción para los archivos destinados a archivar datos o transportar datos entre máquinas con endianness diferente. Algunos de estos problemas se pueden superar generando los datos como archivos de texto, a expensas de la velocidad y el tamaño del archivo.
Nota. Esta función no produce archivos csv de varias líneas, guarda todo en una línea.
numpy.savetxt
guarda una matriz en un archivo de texto.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
Si quieres escribir en columna:
for x in np.nditer(a.T, order=''C''):
file.write(str(x))
file.write("/n")
Aquí ''a'' es el nombre de la matriz numpy y ''archivo'' es la variable para escribir en un archivo.
Si quieres escribir en fila:
writer= csv.writer(file, delimiter='','')
for x in np.nditer(a.T, order=''C''):
row.append(str(x))
writer.writerow(row)