Массивы Numpy — это эффективные структуры данных для работы с данными в Python, а модели машинного обучения в библиотеке scikit-learn и модели глубокого обучения в библиотеке Tensorflow и Keras ожидают входные данные в формате массивов Numpy и делают прогнозы в формате массивов Numpy.
np.savext
Функция np.savetxt() принимает два обязательных параметра: file name и data, сохраняет и загружает массив в текстовый файл в Python. Чтобы сохранить массив numpy в текстовый файл, используйте метод numpy savetxt().

Функция numpy.savetxt() помогает пользователю сохранить массив numpy в текстовый файл вместе с тем, что мы использовали параметр формата в функции.
Синтаксис
|
1 2 3 |
numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='n', header='', footer='', comments='# ', encoding=None) |
Параметры
- fname:
Если имя файла заканчивается на .gz, файл автоматически сохраняется в сжатом формате gzip. Функция loadtxt() прозрачно понимает сжатые gzip-файлы.
- X:
[1D или 2D array_like] Данные для сохранения в текстовый файл.
- fmt:
Одиночный формат(%10.5f), последовательность форматов или многоформатная строка, например, «Итерация %d — %10.5f», в этом случае разделитель игнорируется.
- delimiter:
Строка или символ, разделяющий столбцы.
- newline:
Строка или символ, разделяющий строки.
- header:
Строка будет записана в начало файла.
- footer:
Строка будет записана в конец файла.
- comments:
Строка, которая будет добавлена к строкам заголовка и нижнего колонтитула, чтобы пометить их как комментарии. По умолчанию: ‘#’, как и ожидалось, например, для функции numpy.loadtxt().
- encoding:
Кодировка используется для кодирования выходного файла. Это не относится к выходным потокам. Если кодировка отличается от «bytes» или «latin1», вы не сможете загрузить файл в версиях NumPy < 1.14. По умолчанию используется «latin1».
Пример
В этом примере мы создаем массив с помощью функции np arange(), а затем сохраняем этот массив в текстовом файле с помощью функции savetxt(). См. следующий код.
|
1 2 3 4 5 6 7 8 |
import numpy as np x = np.arange(0, 20, 3) print("x is: ") print(x) # X is an array c = np.savetxt('npfile.txt', x, delimiter=', ') |
Вывод:
|
1 2 3 |
python3 app.py x is: [ 0 3 6 9 12 15 18] |
Итак, наш массив np печатаем в консоли и так же сохраняем в npfile.txt. Файл будет сохранен в той же директории, что и файл нашей программы app.py. Мы можем открыть npfile.txt, прочитать и распечатать содержимое на Python.
Давайте прочитаем содержимое текстового файла и распечатаем его в консоли.
|
1 2 3 4 |
a = open("npfile.txt", 'r') # open file in read mode print("the file contains:") print(a.read()) |
Добавьте приведенный выше код в свой программный файл. Итак, весь ваш файл выглядит так, как показано ниже.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import numpy as np x = np.arange(0, 20, 3) print("x is: ") print(x) # X is an array c = np.savetxt('npfile.txt', x, delimiter=', ') a = open("npfile.txt", 'r') # open file in read mode print("the file contains:") print(a.read()) |
Если вы повторно запустите приведенный выше код, вы увидите вывод ниже.
|
1 2 3 4 5 6 7 8 9 10 |
x is: [ 0 3 6 9 12 15 18] the file contains: 0.000000000000000000e+00 3.000000000000000000e+00 6.000000000000000000e+00 9.000000000000000000e+00 1.200000000000000000e+01 1.500000000000000000e+01 1.800000000000000000e+01 |
TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python
В функции savetxt(), если массивы numpy не имеют одинакового размера, возникает ошибка.
См. приведенный ниже код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import numpy as np a = np.arange(0, 4, 1) b = np.arange(0, 6, 1) c = np.arange(0, 8, 1) print("a is: ") print(a) print("b is: ") print(b) print("c is: ") print(c) d = np.savetxt('npfile.txt',(a, b, c)) |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
a is: [0 1 2 3] b is: [0 1 2 3 4 5] c is: [0 1 2 3 4 5 6 7] Traceback(most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/numpy/lib/npyio.py", line 1447, in savetxt v = format % tuple(row) + newline TypeError: only size-1 arrays can be converted to Python scalars During handling of the above exception, another exception occurred: Traceback(most recent call last): File "app.py", line 14, in d = np.savetxt('npfile.txt',(a, b, c)) File "<__array_function__ internals>", line 5, in savetxt File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/numpy/lib/npyio.py", line 1449, in savetxt raise TypeError("Mismatch between array dtype('%s') and " TypeError: Mismatch between array dtype('object') and format specifier('%.18e') |
В приведенном выше коде мы создали три разных массива с тремя разными размерами.
Именно поэтому сначала произошла TypeError, которая говорит: только массивы size-1 могут быть преобразованы в скаляры Python.
Затем вторая ошибка типа говорит о несоответствии между массивом dtype(«object») и спецификатором формата(«%. 18e»).
Теперь мы можем решить обе ошибки TypeError, минуя один дополнительный параметр fmt. Вы можете сохранить массив как строку с помощью fmt=’ %s’.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import numpy as np a = np.arange(0, 4, 1) b = np.arange(0, 6, 1) c = np.arange(0, 8, 1) print("a is: ") print(a) print("b is: ") print(b) print("c is: ") print(c) d = np.savetxt('npfile.txt',(a, b, c), fmt='%s') |
Вывод:
|
1 2 3 4 5 6 |
a is: [0 1 2 3] b is: [0 1 2 3 4 5] c is: [0 1 2 3 4 5 6 7] |
Теперь вы можете видеть, что наши ошибки TypeError устранены, и мы также можем прочитать файл и распечатать содержимое в консоли.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import numpy as np a = np.arange(0, 4, 1) b = np.arange(0, 6, 1) c = np.arange(0, 8, 1) print("a is: ") print(a) print("b is: ") print(b) print("c is: ") print(c) d = np.savetxt('npfile.txt',(a, b, c), fmt='%s') # open file in read mode print("the file contains:") print(a.read()) f = open("npfile.txt", 'r') print("the file contents are:") print(f.read()) |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 |
a is: [0 1 2 3] b is: [0 1 2 3 4 5] c is: [0 1 2 3 4 5 6 7] the file contents are: [0 1 2 3] [0 1 2 3 4 5] [0 1 2 3 4 5 6 7] |
Функция numpy savetxt для сохранения файла в формате CSV
Функция Numpy savetxt используется для сохранения файла в формате CSV.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 |
from numpy import asarray from numpy import savetxt # define data data = asarray([[0, 1, 2, 3, 4]]) # save to csv file savetxt('npfile.csv', data, delimiter=',', fmt='%s') f = open("npfile.csv", 'r') print("the csv file contents are:") print(f.read()) |
Вывод:
|
1 2 |
The csv file contents are: 0,1,2,3,4 |
Массив имеет одну строку данных с 5 столбцами. Мы ожидаем, что эти данные будут сохранены в файле CSV в виде одной строки данных. После запуска примера мы можем проверить содержимое «npfile.csv». Кроме того, мы прочитали файл csv и распечатали содержимое в консоли.
