Desidero salvare un array 2D in un file CSV con informazioni di "intestazione" di riga e colonna (come una tabella). So che potrei usare l'argomento header su numpy.savetxt per salvare i nomi delle colonne, ma c'è un modo semplice per includere anche qualche altro array (o lista) come prima colonna di dati (come i titoli delle righe)?Python/Numpy - Salva array con colonne e titoli di riga
Di seguito è riportato un esempio di come lo faccio attualmente. C'è un modo migliore per includere quei titoli di riga, forse qualche trucco con salvataggio di cui non sono a conoscenza?
import csv
import numpy as np
data = np.arange(12).reshape(3,4)
# Add a '' for the first column because the row titles go there...
cols = ['', 'col1', 'col2', 'col3', 'col4']
rows = ['row1', 'row2', 'row3']
with open('test.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(cols)
for row_title, data_row in zip(rows, data):
writer.writerow([row_title] + data_row.tolist())
l'uso di hstack deve ricreare la matrice nella memoria, giusto? Quindi, se i dati sono molto grandi, dobbiamo riassegnare nuovamente quella memoria. Per la mia specifica applicazione, è improbabile che ci sia qualche problema reale, ma solo un punto che meriti di essere menzionato. E probabilmente non c'è alcun modo per aggirare questo. Sembra che qualcosa che Savetxt dovrebbe implementare internamente, anche se deve fare una soluzione simile alla mia (ma nel codice C sottostante). –
Sì, hai ragione. Penso che forse tutto questo overhead potrebbe essere evitato con un array di record, e usando il fatto che fmt accetta una lista di operatori di formattazione, come 'fmt = ['% s', '% f', ...]', ma Non ho familiarità con loro, e quindi questa è solo una supposizione. – jorgeca
Ya, ho preso in considerazione anche un array di record. Penso che tu abbia ragione, che potrebbe essere usato ... ma speravo di evitarli ... Immagino che sceglierò solo quello che sembra essere il minore dei due mali. –