Как в матлаб загрузить данные из файла

Обновлено: 05.07.2024

Создание программ часто предполагает сохранение результатов расчетов в файлы для их дальнейшего анализа, обработки и хранения. В связи с этим в среде MATLAB реализованы различные функции по работе с файлами, содержащие данные в разных форматах.

Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы:load, freadиfscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.

В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:

save<имя файла><имена переменных>

load<имя файла><имена переменных>

Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция loadпозволяет загрузить из указанного mat-файла ранее сохраненные переменные.

Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>)

<переменная>=fread(<идентификатор файла>, <размер>, <точность>)

где: <идентификатор файла>– это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:

<идентификатор файла>=fopen(<имя файла>,<режим работы>)

где: параметр <режим работы> может принимать значения, приведенные в таблице 1.

В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fcloseследующей структуры:

fclose(<идентификатор файла>)

С помощью команды fclose(all)можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.

Пример использования функций работы с файлами:

A=[1 2 3 4 5];

fid=fopen('my_file.dat', 'wb');% открытие файла на запись

fwrite(fid, A, 'double');% запись матрицы А в файл

fclose(fid);% закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:

feof(<идентификатор файла>)

Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen

Значение параметра <режим работы> Описание параметра
'r' чтение
'w' запись (стирает предыдущее содержимое файла)
'a' добавление (создает файл, если его нет)
'r+' чтение и запись (не создает файл, если его нет)
'w+' чтение и запись (очищает прежнее содержимое или создает файл, если его нет)
'a+' чтение и добавление (создает файл, если его нет)
'b' дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’

Описанные ранее функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или иные числа или текст. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации: fscanf и fprintf, соответственно.




Функция чтения fscanfимеет следующий синтаксис:

[value, count]=fscanf(fid, format, size)

где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных

Функция записиfprintfимеет следующий синтаксис:

count=fprintf(fid, format, a,b. )

где:a,b,… – переменные для записи в файл.

Таблица 2- Список основных спецификаторов параметра formatдля функций fscanf() и fprintf()

Спецификатор Описание
%d целочисленные значения
%f вещественные значения
%s строковые данные
%c символьные данные
%u беззнаковые целые значения

В форматной строке могут бытьтакже использованы различные управляющие символы:

\r – возврат каретки;

\t – горизонтальная табуляция;

\n – переход на новую строку

С помощью функции fprintf() можно осуществлять запись разнородных данных в файл в требуемом формате, в том числе и строковых переменных, что позволяет размещать в файле различные текстовые надписи.

Загружает данные в массив A из файла, обозначенного именем файла .

Загружает данные из системного буфера обмена, а не из файла.

A = importdata (___, delimiterIn)

Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.

A = importdata (___, delimiterIn, headerlinesIn)

Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .

[A, delimiterOut, headerlinesOut] = importdata (___)

Возвращает обнаруженный символ разделителя для входного файла ASCII в delimiterOut и обнаруженное количество строк заголовка в headerlinesOut , используя любой из входных аргументов в предыдущих синтаксисах.

A = importdata (имя файла)

Загружает данные в массив A из файла, обозначенного именем файла .

Загружает данные из системного буфера обмена, а не из файла.

A = importdata (___, delimiterIn)

Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.

A = importdata (___, delimiterIn, headerlinesIn)

Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .

[A, delimiterOut, headerlinesOut] = importdata (___)

Возвращает обнаруженный символ разделителя для входного файла ASCII в delimiterOut и обнаруженное количество строк заголовка в headerlinesOut , используя любой из входных аргументов в предыдущих синтаксисах.

filename = 'smile.jpg' ; A = importdata ( filename ); image ( A );

Когда вы запускаете файл, MATLAB отображает файл изображения. Однако вы должны сохранить его в текущем каталоге.

Импорт файлов Imange

Пример 2

В этом примере мы импортируем текстовый файл и указываем разделитель и заголовок столбца. Давайте создадим ASCII-файл, разделенный пробелами, с заголовками столбцов с именем weeklydata.txt .

Пример 3

В этом примере давайте импортируем данные из буфера обмена.

Математика проста

Низкоуровневый файловый ввод / вывод

Функция importdata является высокоуровневой функцией. Низкоуровневые функции ввода / вывода файлов в MATLAB позволяют максимально контролировать чтение или запись данных в файл. Однако эти функции нуждаются в более подробной информации о вашем файле для эффективной работы.

MATLAB предоставляет следующие функции для операций чтения и записи на уровне байтов или символов:

функция Описание
fclose Закройте один или все открытые файлы
feof Тест на конец файла
FERROR Информация об ошибках файлового ввода-вывода
fgetl Чтение строки из файла, удаление символов новой строки
fgets Читать строку из файла, сохраняя символы новой строки
Еореп Откройте файл или получите информацию об открытых файлах
fprintf Записать данные в текстовый файл
Fread Чтение данных из двоичного файла
frewind Переместить индикатор положения файла в начало открытого файла
fscanf Читать данные из текстового файла
FSEEK Переместить в указанную позицию в файле
ftell Положение в открытом файле
FWRITE Записать данные в двоичный файл

Импорт текстовых файлов данных с низкоуровневым вводом / выводом

Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.

Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.

Функция fread считывает поток данных на уровне байтов или битов.

Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.

Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.

Функция fread считывает поток данных на уровне байтов или битов.

пример

У нас есть текстовый файл данных «myfile.txt», сохраненный в нашем рабочем каталоге. Файл хранит данные об осадках за три месяца; Июнь, июль и август за 2012 год.

Данные в myfile.txt содержат повторные наборы измерений времени, месяца и количества осадков в пяти местах. Данные заголовка хранят количество месяцев M; таким образом, у нас есть M наборов измерений.

Откройте файл с помощью функции fopen и получите идентификатор файла.

Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.

По умолчанию fscanf считывает данные в соответствии с нашим описанием формата, пока не найдет совпадения для данных или не достигнет конца файла. Здесь мы будем использовать цикл для чтения 3 наборов данных и каждый раз будем читать 7 строк и 5 столбцов.

Откройте файл с помощью функции fopen и получите идентификатор файла.

Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.

По умолчанию fscanf считывает данные в соответствии с нашим описанием формата, пока не найдет совпадения для данных или не достигнет конца файла. Здесь мы будем использовать цикл для чтения 3 наборов данных и каждый раз будем читать 7 строк и 5 столбцов.

load( filename ) данные о загрузках из filename .

Если filename ASCII-файл, затем load(filename) создает массив с двойной точностью, содержащий данные из файла.

load( filename , variables ) загружает заданные переменные из MAT-файла, filename .

load( filename ,'-ascii') обработки filename как ASCII-файл, независимо от расширения файла.

load( filename ,'-mat') обработки filename как MAT-файл, независимо от расширения файла.

load( filename ,'-mat', variables ) загружает заданные переменные из filename .

S = load( ___ ) данные о загрузках в S , использование любого из входных параметров в предыдущей группе синтаксиса.

Если filename MAT-файл, затем S массив структур.

Если filename ASCII-файл, затем S массив с двойной точностью, содержащий данные из файла.

load filename форма команды синтаксиса. Форма команды требует меньшего количества специальных символов. Вы не должны вводить круглые скобки или заключать вход в одинарные или двойные кавычки. Разделите входные параметры пробелами вместо запятых.

Например, чтобы загрузить файл с именем durer.mat , эти операторы эквивалентны:

Можно включать любые из входных параметров, описанных в предыдущих синтаксисах. Например, чтобы загрузить переменную под названием X :

Не используйте форму команды когда любые из входных параметров, таких как filename , переменные или строки.

Примеры

Загрузка всех переменных из MAT-файла

Загрузите все переменные из MAT-файла в качестве примера, gong.mat . Проверяйте содержимое рабочей области до и после операции загрузки.

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

Загрузка определенной переменной из MAT-файла

Загрузите только переменную y из файла в качестве примера handel.mat . Если рабочая область уже содержит переменную y , load операция перезаписывает его с данными из файла.

Также можно использовать синтаксис команд, чтобы загрузить переменную, y .

Использование регулярных выражений, чтобы загрузить определенные переменные

Просмотрите содержимое файла в качестве примера, accidents.mat .

Используйте синтаксис функций, чтобы загрузить все переменные с именами, не начинающимися с 'hwy' , из файла.

В качестве альтернативы используйте синтаксис команд, чтобы загрузить те же переменные.

Загрузка списка переменных в массив структур

Файл, durer.mat , содержит переменные X , caption , и map . Создайте массив ячеек имен переменных, чтобы загрузить.

Только переменные X и caption загружаются в массив структур, S .

Загрузка ASCII-ФАЙЛА

Создайте ASCII-файл из нескольких матриц с 4 столбцами и загрузите данные назад в массив с двойной точностью.

load создает массив типа double названный mydata .

Просмотрите информацию о mydata .

filename — Имя файла
matlab.mat (значение по умолчанию) | вектор символов | строковый скаляр

Имя файла в виде вектора символов или строкового скаляра. Если вы не задаете filename , load функционируйте ищет файл с именем matlab.mat .

Если filename не имеет никакого расширения (то есть, никакой текст после периода), load ищет файл с именем filename.mat . Если filename имеет расширение кроме .mat , load функционируйте обрабатывает файл как данные о ASCII.

В зависимости от местоположения вашего файла, filename может взять одну из следующих форм.

Задайте имя файла в filename .

Пример: 'myFile.mat'

Если файл не находится в текущей папке или в папке на пути MATLAB, то задайте полный или относительный путь в filename .

Пример: 'C:\myFolder\myFile.mat'

Пример: 'dataDir\myFile.mat'

Удаленные Местоположения (только MAT-файлы версии 7.3)

Если файл хранится в удаленном местоположении, то filename должен быть универсальный локатор ресурса (URL) этой формы:

scheme_name :// path_to_file / my_file.mat

На основе вашего удаленного местоположения, scheme_name может быть одно из значений в этой таблице.

load функционируйте только поддерживает MAT-файлы версии 7.3 загрузки от удаленных местоположений.

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

Пример: 's3://bucketname/path_to_file/my_file.mat'

При использовании формы команды load , вы не должны заключать вход в одинарные кавычки. Однако, если filename содержит пробел, необходимо заключить аргумент в одинарные кавычки. Например, load 'filename withspace.mat' .

Примечание

Не используйте форму команды когда filename строка.

ASCII-файлы должны содержать прямоугольную таблицу чисел с равным количеством элементов в каждой строке. Разделитель файла (символ между элементами в каждой строке) может быть пробелом, запятой, точкой с запятой или символом табуляции. Файл может содержать комментарии MATLAB (линии, которые начинаются со знака процента, % ).

variables — Имена переменных, чтобы загрузить
вектор символов | строковый скаляр

Имена переменных, чтобы загрузить в виде одного или нескольких вектор символов или строковый скаляр. При использовании формы команды load , вы не должны заключать вход в одинарные кавычки.

Примечание

Не используйте форму команды когда variables строка.

variables может быть в одной из следующих форм.

Выходные аргументы

S — Загруженные переменные или данные
массив структур | m - n массив

Загруженные переменные, возвращенные как массив структур, если filename MAT-файл.

Загруженные данные, возвращенные как m - n массив типа double , если filename ASCII-файл. m равно количеству линий в файле и n равно количеству значений на линии.

Ограничения

При работе с удаленными данными, load не поддерживает обработку входного файла как ASCII-файл.

Алгоритмы

Если вы не задаете выход для load функция, MATLAB создает переменную, названную в честь загруженного файла (минус любое расширение файла). Например, команда

считывает данные в переменную под названием mydata .

Создать имя переменной, load предшествует любым начальным символам подчеркивания или цифрам в filename с X и замены любые другие неалфавитные символы с символами нижнего подчеркивания. Например, команда

создает переменную под названием X10_May_data .

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

Не поддерживает использование функции без присвоения на структуру или массив. Например, используйте S = load(filename) , не load(filename) .

Выход S должно быть имя структуры или массива без любого индексирования. Например, S(i) = load('myFile.mat') не поддерживается.

Аргументы к load должно быть время компиляции постоянные векторы символов.

Если MAT-файл содержит неподдерживаемые построения, используйте S = load(filename,variables) загружать только поддерживаемые построения.

В функции, предназначенной для генерации кода, использования save или использование coder.extrinsic с save не поддерживается. Чтобы сохранить данные о рабочей области к MAT-файлу, используйте save функция до генерации кода.

При использовании load функционируйте, чтобы загрузить переменные, размер которых может измениться во время выполнения, необходимо явным образом объявить переменные как данные переменного размера при помощи coder.varsize .

Смотрите также

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

© 1994-2021 The MathWorks, Inc.

Для просмотра документации необходимо авторизоваться на сайте
Войти

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

Создайте файл сценария в MATLAB со следующим содержимым:

Запустите файл, и MATLAB отобразит файл изображения.



** Примечание. ** Файл изображения должен быть сохранен в текущем каталоге.

2. Импортировать текстовый файл

Содержимое текстового файла выглядит следующим образом:

Тестовый код выглядит следующим образом:

** Примечание: ** textdata читает файл заголовка n-строки, идентифицируемый headerlinesIn,colheadersЗдесьheaderlinesInПоследняя строка используется в качестве имени столбца.textdataВ дополнение кheaderlinesInКроме этого, каждая строка читается как строка, а не как разделенная.

3. Импортировать данные из буфера обмена

Скопируйте следующее в буфер обмена:

Процветающий, сильный, демократичный, цивилизованный, гармоничный

Создайте файл сценария в MATLAB со следующим содержимым:


Результаты следующие:

4. Сводка использования функции importdata

функция объяснение
A = importdata(filename) Загрузить данные из файла, представленного именем файла, в массив A
A = importdata(’-pastespecial’) Загружать данные из системного буфера обмена, а не из файла.
A = importdata(___, delimiterIn) Интерпретировать delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных параметров в приведенном выше синтаксисе.
A = importdata(___, delimiterIn, headerlinesIn) Загрузите данные из файла ASCII, имени файла или буфера обмена и прочитайте числовые данные, начиная с lineheaderlinesIn + 1.
[A, delimiterOut, headerlinesOut] = importdata(___) Возвращает обнаруженный символ разделителя в выходных данных разделителя и определяет количество строк заголовка, обнаруженных в headerlinesOut, используя любой из входных параметров в предыдущем синтаксисе.

Интеллектуальная рекомендация


Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом для чтения.

Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом чтения Fabric Файл исходного кода одиночного режима находится в ord.


Мяу Пасс Матрица SDUT

Мяу Пасс Матрица SDUT Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description Лянцзян получил матрицу, но эта матрица была особенно уродливой, и Лянцзян испытал отвращение. Чт.


Гессенская легкая двоичная структура удаленного вызова

Hessian - это легкая двоичная структура удаленного вызова, официальный адрес документа, в основном он включает протокол удаленного вызова Hessian, протокол сериализации Hessian, прокси-сервер клиента .


TCP Pasket и распаковка и Нетти Solutions

Основные введение TCP является ориентированным на соединение, обеспечивая высокую надежность услуг. На обоих концах (клиенты и терминалы сервера) должны иметь один или более гнезда, так что передающий.

Читайте также: