Перейти к содержимому

Как записать матрицу в файл python

  • автор:

Чтение матрицы из .txt файла

введите сюда описание изображения

Мой код:

with open('m.txt') as file: file = file.read() q = file.replace(' ', '') # убираю лишние пробелы f1 = q[0:8] # в переменную f1 сохраняю первую строку f2 = q[9:16] # в f2 - вторую строку f3 = q[17:24] f4 = q[25:32] f5 = q[33:40] f6 = q[41:48] 

В правильном ли я направлении иду и как быть дальше?

Отслеживать

12.5k 7 7 золотых знаков 19 19 серебряных знаков 48 48 бронзовых знаков

задан 28 окт 2018 в 14:29

309 2 2 золотых знака 9 9 серебряных знаков 18 18 бронзовых знаков

f = open(‘m.txt, ‘r’) matrix = [line.replace(«\n», «»).split() for line in f]

28 окт 2018 в 14:34

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

1 2 3 4 5 6 7 8 8 7 9 6 5 4 1 2 1 2 0 1 4 8 7 5 4 5 2 3 6 9 8 7 0 1 2 3 0 1 2 5 2 1 4 5 6 9 8 7 1 2 5 4 7 8 5 2 10 1 2 4 5 6 9 8 
In [5]: with open('matrix.txt') as f: . matrix = [list(map(int, row.split())) for row in f.readlines()] . In [6]: matrix Out[6]: [[1, 2, 3, 4, 5, 6, 7, 8], [8, 7, 9, 6, 5, 4, 1, 2], [1, 2, 0, 1, 4, 8, 7, 5], [4, 5, 2, 3, 6, 9, 8, 7], [0, 1, 2, 3, 0, 1, 2, 5], [2, 1, 4, 5, 6, 9, 8, 7], [1, 2, 5, 4, 7, 8, 5, 2], [10, 1, 2, 4, 5, 6, 9, 8]] In [7]: matrix.reverse() In [8]: matrix Out[8]: [[10, 1, 2, 4, 5, 6, 9, 8], [1, 2, 5, 4, 7, 8, 5, 2], [2, 1, 4, 5, 6, 9, 8, 7], [0, 1, 2, 3, 0, 1, 2, 5], [4, 5, 2, 3, 6, 9, 8, 7], [1, 2, 0, 1, 4, 8, 7, 5], [8, 7, 9, 6, 5, 4, 1, 2], [1, 2, 3, 4, 5, 6, 7, 8]] 

Ну и запись в другой файл соответственно:

In [14]: with open('output.txt', 'w') as f: . for row in matrix: . f.write(' '.join(map(str, row)) + '\n') 

Как записать матрицу в файл python

Изучаю Python.
ОС Winows 10 (64)
Python 3.6.1
NumPu 1.12.1 ставил через pip.

При работе с модулем NumPy столкнулся с такой проблемой:
При записи массива в текстовый файл (5 строк, 2 столбца):

fhou = open(ouf, 'wt') np.savetxt(fhou, MyMatr, fmt='% .5f')

Выдается сообщение вида:
TypeError: Mismatch between array dtype (‘float64’) and format specifier (‘% .5f % .5f’)
В сети нашел ответ (годичной давности), из которого следует, что файл следует открывать в бинарной моде или перейти на NumPy 1.11.1:

fhou = open(ouf, 'wb') np.savetxt(fhou, MyMatr, fmt='% .5f')

Попробовал. Да, работает, но массив пишется строкой, без разбивки на столбцы (как бы хотелось).
Возможно кто то решал этот вопрос?
Поделитесь информацией.
И да, в NumPy 1.11.1 это будет работать?

Регистрация: 23.10.2010
Сообщений: 2,287

Редактировать свой пост видимо поздно.
ОС Winows 10 (64)
Перепроверил и переустановил Python.
Была установлена 32-бит версия. Установил 64-бит.
Теперь:
Python 3.6.1 (64-bit)
NumPu 1.13.0 (64-bit)

При записи матрицы (например, массив 3х3) в текстовый файл, если файл открыт как текстовый:

fhou = open(ouf, 'wt') np.savetxt(fhou, MyMatr)

Как и прежде выдается сообщение вида:
TypeError: Mismatch between array dtype (‘float64’) and format specifier (‘%.18e %.18e %.18e’)
Так получается, что мой массив имеет тип float64, и этот тип не совпадает с заданным по умолчанию.
Но если изменить тип данных на другой — такая же фигня.

Ответ в сетях годичной давности.
В нем рекомендуют открывать файл в бинарной моде.

fhou = open(ouf, 'wb') np.savetxt(fhou, MyMatr)

И это по-прежнему работает в новых условиях.
Но дело в том, что данные записываются в одну строку, даже если задать параметр delimiter = ‘\n’.

И тут дело не в том, что можно писать через write() и формировать нужный вид в текстовом файле. Это просто и получается нормально.
Но вот в NumPy есть и такой вариант, когда можно инициализировать массив, прочитав данные из форматированного текстового файла. Например:

MyMatr1 = np.loadtxt(fh_i, dtype=np.float, ndmin = 1) print(MyMatr1)

И это работает хорошо.
Но при чтении такого файла надо заранее знать из чего же он был сделан .

Возможно, что я сильно не .
Возможно, что этот метод, хотя и позиционируется как для сохранения в текстовом файле, так и не должен работать?
В этом я сильно сомневаюсь. Но я новичок и .

Запись массива NumPy в файл CSV

Часто перед аналитиками данных и исследователями встает задача сохранения результатов в формате, который удобен для чтения и дальнейшего использования.

Алексей Кодов
Автор статьи
7 июля 2023 в 16:48

Часто перед аналитиками данных и исследователями встает задача сохранения результатов в формате, который удобен для чтения и дальнейшего использования. Одним из таких форматов является CSV (Comma-Separated Values) — текстовый формат, который используется для представления табличных данных. Каждая строка в таком файле — это строка таблицы, а столбцы разделяются запятой.

Рассмотрим типичный пример. Предположим, что был произведен расчет или анализ данных, и результаты этих действий хранятся в двумерном массиве NumPy. Теперь эти данные нужно сохранить в файле CSV для дальнейшего использования, например, для анализа в других программах.

Для записи массива NumPy в файл CSV можно использовать функцию numpy.savetxt . Эта функция сохраняет двумерный массив в текстовый файл. В качестве первого аргумента функция принимает имя файла, в который будет произведена запись. Вторым аргументом является массив, который нужно записать. Также можно указать разделитель (по умолчанию пробел), который будет использоваться для отделения значений в строке.

Пример записи массива в CSV-файл:

import numpy as np # Создаем двумерный массив array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Записываем массив в файл CSV np.savetxt("array.csv", array, delimiter=",")

После выполнения этого кода в корневой директории проекта появится файл array.csv , содержащий данные из массива array . Если открыть файл, то увидим следующее:

1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00 4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00 7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00 

Если требуется записать данные в более читаемом формате, можно использовать параметр fmt функции numpy.savetxt , который позволяет указать формат данных. Например, %d для целых чисел и %.2f для чисел с плавающей точкой с двумя знаками после запятой:

np.savetxt("array.csv", array, delimiter=",", fmt="%d")

Теперь в файле array.csv хранятся данные в следующем виде:

1,2,3 4,5,6 7,8,9 

Итак, функция numpy.savetxt является удобным инструментом для сохранения двумерных массивов NumPy в файлы CSV.

Матрицы в Python и массивы NumPy

Матрица — это двухмерная структура данных, в которой числа расположены в виде строк и столбцов. Например:

Эта матрица является матрицей три на четыре, потому что она состоит из 3 строк и 4 столбцов.

Обновлено: 2023-06-17 20:46:41 Вадим Дворников автор материала

Матрицы в Python

Python не имеет встроенного типа данных для матриц. Но можно рассматривать список как матрицу. Например:

A = [[1, 4, 5], [-5, 8, 9]]

Этот список является матрицей на 2 строки и 3 столбца.

Матрицы в Python

Обязательно ознакомьтесь с документацией по спискам Python, прежде чем продолжить читать эту статью.

Давайте посмотрим, как работать с вложенным списком.

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] print("A =", A) print("A[1] =", A[1]) # вторая строка print("A[1][2] =", A[1][2]) # третий элемент второй строки print("A[0][-1] =", A[0][-1]) # последний элемент первой строки column = []; # пустой список for row in A: column.append(row[2]) print("3rd column 1" data-ab-test="post_related" data-ab-key="yarpp">
Как работают массивы в Python?

Когда мы запустим эту программу, результат будет следующий:

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] A [1] = [-5, 8, 9, 0] A [1] [2] = 9 A [0] [- 1] = 12 3-й столбец = [5, 9, 11]

Использование вложенных списков в качестве матрицы подходит для простых вычислительных задач. Но в Python есть более эффективный способ работы с матрицами – NumPy .

NumPy массивы в Python

NumPy - это расширение для научных вычислений, которое поддерживает мощный объект N-мерного массива. Прежде чем использовать NumPy, необходимо установить его. Для получения дополнительной информации,

  • Ознакомьтесь: Как установить NumPy Python?
  • Если вы работаете в Windows, скачайте и установите дистрибутив anaconda Python. Он поставляется вместе с NumPy и другими расширениями.

После установки NumPy можно импортировать и использовать его.

NumPy предоставляет собой многомерный массив чисел (который на самом деле является объектом). Давайте рассмотрим приведенный ниже пример:

import numpy as np a = np.array([1, 2, 3]) print(a) # Вывод: [1, 2, 3] print(type(a)) # Вывод:

Как видите, класс массива NumPy называется ndarray.

Как создать массив NumPy?

Существует несколько способов создания массивов NumPy.

Массив целых чисел, чисел с плавающей точкой и составных чисел

import numpy as np A = np.array([[1, 2, 3], [3, 4, 5]]) print(A) A = np.array([[1.1, 2, 3], [3, 4, 5]]) # Массив чисел с плавающей запятой print(A) A = np.array([[1, 2, 3], [3, 4, 5]], dtype = complex) # Массив составных чисел print(A)

Когда вы запустите эту программу, результат будет следующий:

[[1 2 3] [3 4 5]] [[1.1 2. 3.] [3. 4. 5.]] [[1. + 0.j 2. + 0.j 3. + 0.j] [3. + 0.j 4. + 0.j 5. + 0.j]]

Массив нулей и единиц

import numpy as np zeors_array = np.zeros( (2, 3) ) print(zeors_array) ''' Вывод: [[0. 0. 0.] [0. 0. 0.]] ''' ones_array = np.ones( (1, 5), dtype=np.int32 ) // указание dtype print(ones_array) # Вывод: [[1 1 1 1 1]]

Здесь мы указали dtype - 32 бита (4 байта). Следовательно, этот массив может принимать значения от -2 -31 до 2 -31 -1.

Использование arange() и shape()

import numpy as np A = np.arange(4) print('A =', A) B = np.arange(12).reshape(2, 6) print('B =', B) ''' Вывод: A = [0 1 2 3] B = [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]] '''

Узнайте больше о других способах создания массива NumPy .

Операции с матрицами

Выше мы привели пример сложение, умножение матриц и транспонирование матрицы. Мы использовали вложенные списки, прежде чем создавать эти программы. Рассмотрим, как выполнить ту же задачу, используя массив NumPy.

Сложение двух матриц или сумма элементов массива Python

Мы используем оператор +, чтобы сложить соответствующие элементы двух матриц NumPy.

import numpy as np A = np.array([[2, 4], [5, -6]]) B = np.array([[9, -3], [3, 6]]) C = A + B # сложение соответствующих элементов print(C) ''' Вывод: [[11 1] [ 8 0]] '''

Умножение двух матриц Python

Чтобы умножить две матрицы, мы используем метод dot(). Узнайте больше о том, как работает numpy.dot .

Примечание: * используется для умножения массива (умножения соответствующих элементов двух массивов), а не умножения матрицы.

import numpy as np A = np.array([[3, 6, 7], [5, -3, 0]]) B = np.array([[1, 1], [2, 1], [3, -3]]) C = a.dot(B) print(C) ''' Вывод: [[ 36 -12] [ -1 2]] '''

Транспонирование матрицы питон

Мы используем numpy.transpose для вычисления транспонирования матрицы.

import numpy as np A = np.array([[1, 1], [2, 1], [3, -3]]) print(A.transpose()) ''' Вывод: [[ 1 2 3] [ 1 1 -3]] '''

Как видите, NumPy значительно упростил нашу задачу.

Доступ к элементам матрицы, строкам и столбца

Доступ к элементам матрицы

Также можно получить доступ к элементам матрицы, используя индекс. Начнем с одномерного массива NumPy.

import numpy as np A = np.array([2, 4, 6, 8, 10]) print("A[0] =", A[0]) # Первый элемент print("A[2] =", A[2]) # Третий элемент print("A[-1] highlight" data-hscroll>
A [0] = 2 A [2] = 6 A [-1] = 10

Теперь выясним, как получить доступ к элементам двухмерного массива (который в основном представляет собой матрицу).

import numpy as np A = np.array([[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]) # Первый элемент первой строки print("A[0][0] =", A[0][0]) # Третий элемент второй строки print("A[1][2] =", A[1][2]) # Последний элемент последней строки print("A[-1][-1] highlight" data-hscroll>
A [0] [0] = 1 A [1] [2] = 9 A [-1] [- 1] = 19

Доступ к строкам матрицы

import numpy as np A = np.array([[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]) print("A[0] =", A[0]) # Первая строка print("A[2] =", A[2]) # Третья строка print("A[-1] highlight" data-hscroll>
A [0] = [1, 4, 5, 12] A [2] = [-6, 7, 11, 19] A [-1] = [-6, 7, 11, 19]

Доступ к столбцам матрицы

import numpy as np A = np.array([[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]) print("A[:,0] =",A[:,0]) # Первый столбец print("A[:,3] =", A[:,3]) # Четвертый столбец print("A[:,-1] highlight" data-hscroll>
A [:, 0] = [1 -5 -6] A [:, 3] = [12 0 19] A [:, - 1] = [12 0 19]

Если вы не знаете, как работает приведенный выше код, прочтите раздел "Разделение матрицы".

Разделение матрицы

Разделение одномерного массива NumPy аналогично разделению списка. Рассмотрим пример:

import numpy as np letters = np.array([1, 3, 5, 7, 9, 7, 5]) # с 3-го по 5-ый элементы print(letters[2:5]) # Вывод: [5, 7, 9] # с 1-го по 4-ый элементы print(letters[:-5]) # Вывод: [1, 3] # с 6-го до последнего элемента print(letters[5:]) # Вывод:[7, 5] # с 1-го до последнего элемента print(letters[:]) # Вывод:[1, 3, 5, 7, 9, 7, 5] # список в обратном порядке print(letters[::-1]) # Вывод:[5, 7, 9, 7, 5, 3, 1]

Теперь посмотрим, как разделить матрицу.

import numpy as np A = np.array([[1, 4, 5, 12, 14], [-5, 8, 9, 0, 17], [-6, 7, 11, 19, 21]]) print(A[:2, :4]) # две строки, четыре столбца ''' Вывод: [[ 1 4 5 12] [-5 8 9 0]] ''' print(A[:1,]) # первая строка, все столбцы ''' Вывод: [[ 1 4 5 12 14]] ''' print(A[:,2]) # все строки, второй столбец ''' Вывод: [ 5 9 11] ''' print(A[:, 2:5]) # все строки, с третьего по пятый столбец ''' Вывод: [[ 5 12 14] [ 9 0 17] [11 19 21]] '''

Использование NumPy вместо вложенных списков значительно упрощает работу с матрицами. Мы рекомендуем детально изучить пакет NumPy, если вы планируете использовать Python для анализа данных.

Вадим Дворников автор-переводчик статьи « Python Matrices and NumPy Arrays »

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *