Мудрое сохранение массива в текстовый файл - PullRequest
31 голосов
/ 05 марта 2012

У меня есть массив numpy вида

a = [1,2,3]

который я хочу сохранить в файл .txt, чтобы файл выглядел следующим образом:

1 2 3

Если я использую numpy.savetxt, я получаю файл вроде:

1
2
3

Должно быть, должно быть простое решение, какие-нибудь предложения?

Ответы [ 9 ]

38 голосов
/ 05 марта 2012

Если numpy >= 1.5, вы можете:

# отметить, что имя файла заключено в двойные кавычки,
# пример "filename.txt"

numpy.savetxt("filename", a, newline=" ")

Редактировать

несколько одномерных массивов одинаковой длины

a = numpy.array([1,2,3])
b = numpy.array([4,5,6])
numpy.savetxt(filename, (a,b), fmt="%d")

# gives:
# 1 2 3
# 4 5 6

несколько одномерных массивов переменной длины

a = numpy.array([1,2,3])
b = numpy.array([4,5])

with open(filename,"w") as f:
    f.write("\n".join(" ".join(map(str, x)) for x in (a,b)))

# gives:
# 1 2 3
# 4 5
16 голосов
/ 05 марта 2012

Альтернативный ответ - изменить форму массива так, чтобы он имел размеры (1, N) примерно так:

savetext(filename, a.reshape(1, a.shape[0]))
7 голосов
/ 05 марта 2012
import numpy
a = numpy.array([1,2,3])

with open(r'test.txt', 'w') as f:
    f.write(" ".join(map(str, a)))
2 голосов
/ 15 марта 2018
import numpy as np

a = [1,2,3]    
b = np.array(a).reshape((1,3))    
np.savetxt('a.txt',b,fmt='%d')
2 голосов
/ 14 мая 2016

Я обнаружил, что первое решение в принятом ответе проблематично для случаев, когда символ новой строки все еще требуется.Самым простым решением проблемы было следующее:

numpy.savetxt(filename, [a], delimiter='\t')
1 голос
/ 10 ноября 2018

Я знаю, что это старый, но ни один из этих ответов не решил корневую проблему numpy, не сохраняя массив построчно.Я обнаружил, что этот лайнер помог мне:

b = np.matrix(a)
np.savetxt("file", b)
0 голосов
/ 06 марта 2019

Метод numpy.savetxt() имеет несколько параметров, которые стоит отметить:

fmt: str или последовательность strs, необязательно
он используется для форматирования чисел в массиве, подробности о форматировании см. в документе

разделитель: str, необязательно
Строка или символьные разделительные столбцы

перевод строки: str, необязательно
Строка или символьные разделительные линии.

Давайте рассмотрим пример. У меня есть массив размером (M, N), который состоит из целых чисел в диапазоне (0, 255). Чтобы сохранить массив по строкам и красиво показать его, мы можем использовать следующий код:

import numpy as np

np.savetxt("my_array.txt", my_array, fmt="%4d", delimiter=",", newline="\n")
0 голосов
/ 29 сентября 2018

Очень, очень просто: [1,2,3]

Список похож на столбец.

1
2
3

Если вам нужен список, похожий на строку, двойной корсет:

[[1, 2, 3]]  --->    1, 2, 3

и

[[1, 2, 3], [4, 5, 6]]  ---> 1, 2, 3
                             4, 5, 6

Наконец:

np.savetxt("file", [['r1c1', 'r1c2'], ['r2c1', 'r2c2']], delimiter=';', fmt='%s')

Обратите внимание, запятая в квадратных скобках, внутренний список - это элементы внешнего списка

0 голосов
/ 05 марта 2012

только

' '.join(a)

и запишите этот вывод в файл.

...