Я хочу сохранить 2D-массив в CSV-файл с информацией о заголовке строки и столбца (например, таблицу). Я знаю, что я могу использовать аргумент заголовка для numpy.savetxt для сохранения имен столбцов, но есть ли простой способ включить другой массив (или список) в качестве первого столбца данных (например, названия строк)?Python/Numpy - Сохранить массив с заголовками столбцов и строк
Ниже приведен пример того, как я это делаю сейчас. Есть ли лучший способ включить эти названия строк, возможно, какой-то трюк с savetxt, о котором я не знаю?
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())
Использование hstack должно воссоздать массив в памяти, хотя, правильно? Поэтому, если данные очень большие, мы должны снова переназначить эту память. Для моего конкретного приложения это вряд ли будет какой-то реальной проблемой, а просто стоит упомянуть. И, вероятно, это не так. Кажется, что savetxt должен реализовываться внутренне, даже если он должен делать решение, подобное моему (но в базовом C-коде). –
Да, вы правы. Я думаю, что, возможно, все эти накладные расходы можно было бы избежать с помощью массива записей и использовать тот факт, что fmt принимает список операторов форматирования, например 'fmt = ['% s', '% f', ...]', но Я не знаком с ними, и поэтому это всего лишь предположение. – jorgeca
Я также рассматривал массив записей. Я думаю, вы правы, что его можно использовать ... но я надеялся избежать их ... Наверное, я просто выберу то, что, кажется, меньше из двух зол. –