В MATLAB данные представлены в виде массивов, где базовой структурой является матрица типа double. Даже скаляры и векторы рассматриваются как частные случаи матриц. Это упрощает реализацию алгоритмов линейной алгебры и позволяет унифицировать обработку различных типов данных.
Часто используются типы single и double для числовых вычислений с плавающей точкой. Для экономии памяти в задачах с ограниченными ресурсами предпочтителен тип single, но стоит учитывать снижение точности. Целочисленные форматы (int8, uint16 и др.) применяются при работе с изображениями, бинарными данными и системами реального времени.
Логический тип logical эффективен при работе с масками, фильтрами и условной выборкой. Символьные строки и строковые массивы представлены типами char и string, причем string предпочтительнее для работы с текстом в современных версиях MATLAB благодаря более высокой гибкости и удобству манипуляций.
Структуры (struct) и ячейки (cell) применяются для хранения разнородных данных. Структуры позволяют обращаться к данным по именам полей, а ячейки – хранить элементы разных типов и размеров. Для сложных моделей данных рекомендуется комбинировать оба подхода в зависимости от требований к доступу и обработке.
Таблицы (table) и временные таблицы (timetable) используются для работы с гетерогенными наборами данных, особенно в задачах анализа данных и построения временных рядов. Эти форматы обеспечивают поддержку именованных переменных и автоматизированную синхронизацию по времени.
Чтение и сохранение матриц в формате.mat
Файлы с расширением .mat
используются в MATLAB для хранения переменных, включая матрицы любых размеров и типов. Этот формат поддерживает как простые, так и структурированные данные, включая многомерные массивы и ячейки.
- Для сохранения матрицы используйте команду
save
:save('имя_файла.mat', 'A')
– сохраняет переменнуюA
в файл.save('имя_файла.mat', 'A', '-v7.3')
– используется при сохранении больших массивов, превышающих 2 ГБ.
- Если необходимо сохранить все переменные текущей рабочей области:
save('имя_файла.mat')
- Для загрузки данных применяется команда
load
:load('имя_файла.mat')
– загружает все переменные из файла в текущую рабочую область.load('имя_файла.mat', 'A')
– загружает только переменнуюA
.
Проверку содержимого файла без его загрузки в рабочую область выполняйте командой whos -file имя_файла.mat
.
Формат .mat
версии по умолчанию – -v7
. Для совместимости с более старыми версиями MATLAB используйте -v6
, а для хранения объектов, структур и больших данных – -v7.3
.
Не используйте -v7.3
без необходимости: он создаёт файлы большего размера и может замедлить операции сохранения и загрузки. Для большинства задач достаточно форматов -v7
или -v6
.
Импорт текстовых файлов с табличными данными
Для загрузки табличных данных из текстовых файлов в MATLAB применяется функция readtable
. Она поддерживает форматы CSV, TSV и другие текстовые файлы с разделителями. Пример использования:
T = readtable('данные.csv');
По умолчанию MATLAB определяет разделитель автоматически, но при необходимости его можно указать явно с помощью параметра 'Delimiter'
. Например, для файлов с табуляцией:
T = readtable('таблица.txt', 'Delimiter', '\t');
Если в файле присутствует строка заголовков, readtable
распознаёт её автоматически. При отсутствии заголовков используется параметр 'ReadVariableNames'
:
T = readtable('без_заголовков.txt', 'ReadVariableNames', false);
Для пропуска ненужных строк в начале файла применяется 'HeaderLines'
. Пример:
T = readtable('пример.txt', 'HeaderLines', 3);
Если необходимо задать конкретный формат столбцов, используется параметр 'Format'
. Пример с тремя столбцами: числом, строкой и логическим значением:
T = readtable('пример.txt', 'Format', '%f%s%t');
В случае некорректных или отсутствующих значений можно указать значение-пустышку через 'TreatAsEmpty'
:
T = readtable('данные.csv', 'TreatAsEmpty', {'NA', 'n/a', ''});
Если файл содержит нестандартную кодировку, её можно задать явно через 'Encoding'
, например:
T = readtable('файл.txt', 'Encoding', 'Windows-1251');
Для ускорения импорта больших файлов рекомендуется отключать автоматическое определение типов с помощью 'VariableTypes'
и задавать их вручную.
Работа с ячейковыми массивами при передаче разнородных данных
Ячейковые массивы в MATLAB предназначены для хранения элементов разных типов в одной структуре. Это особенно полезно при необходимости передачи данных, которые не могут быть представлены в виде одномерного или многомерного числового массива.
Создание ячейкового массива выполняется с помощью фигурных скобок: C = {1, ‘текст’, [1 2 3], struct(‘a’, 5)}. Здесь в одной переменной хранятся число, строка, вектор и структура. Такой подход исключает необходимость предварительного преобразования всех элементов к общему типу.
Доступ к элементам осуществляется через фигурные скобки: значение = C{2}. При этом C(2) возвращает саму ячейку как объект, а не её содержимое. Это важно при передаче ячеек между функциями, где требуется сохранить тип упаковки данных.
Для хранения входных параметров функций с переменной структурой данных удобно использовать varargin, который по умолчанию является ячейковым массивом. Это позволяет принимать аргументы разного типа и количества без дополнительных проверок на соответствие формату.
Ячейковые массивы применимы при построении гетерогенных коллекций. Например, в графических интерфейсах элементы интерфейса могут храниться в одном массиве, независимо от их класса: controls = {uicontrol(‘Style’,’edit’), axes, uitable}. Это упрощает обработку и обновление элементов по индексу.
При работе с большими объёмами разнородной информации имеет смысл использовать cellfun или cell2mat для векторизации обработки. Однако cell2mat применим только при наличии однородных числовых массивов в ячейках. Иначе потребуется предварительная фильтрация данных.
Для избежания ошибок при копировании или передаче ячеек между рабочими областями рекомендуется проверять содержимое функцией iscell и уточнять типы вложенных объектов через class или isa.
Использование структур для хранения связанных данных
В MATLAB структуры применяются для группировки разнородной информации, относящейся к одному объекту. Каждое поле структуры может содержать данные любого типа: числа, строки, массивы, ячейки, другие структуры. Это позволяет хранить связанные данные в едином контейнере без необходимости использования отдельных переменных.
Создание структуры возможно вручную или с помощью функций. Пример ручного создания:
student.name = 'Иванов';
student.age = 21;
student.grades = [85 92 78];
Для инициализации массива структур используют функцию struct
:
group = struct('name', {'Иванов', 'Петров'}, ...
'age', {21, 22}, ...
'grades', {[85 92 78], [88 90 81]});
Обращение к полям осуществляется через точечную нотацию:
avg = mean(group(2).grades);
Для массовой обработки используют функции arrayfun
или цикл for
:
ages = arrayfun(@(s) s.age, group);
Структуры удобно применять при чтении данных из файлов. Например, функция readstruct
позволяет загружать JSON-файл в структуру:
data = readstruct('data.json');
При передаче данных между функциями структура используется как контейнер с параметрами. Это повышает читаемость кода и упрощает поддержку.
Для вложенности поддерживается создание структур в структурах:
student.address.city = 'Москва';
student.address.zip = '101000';
Чтобы получить список всех полей структуры, применяют функцию fieldnames
:
fields = fieldnames(student);
Структуры в MATLAB – удобный способ хранения и обработки данных с различной природой, логически объединённых в рамках одной сущности.
Экспорт числовых массивов в формат CSV
Для сохранения числовых массивов из MATLAB в CSV-файл применяется функция writematrix
. Она поддерживает как двумерные массивы типа double
, так и логические матрицы. Файл создаётся в текстовом формате с разделителями, по умолчанию используется запятая.
- Чтобы сохранить матрицу
A
в файлdata.csv
, используйте команду:writematrix(A, 'data.csv');
- Для указания другого разделителя добавьте параметр
'Delimiter'
:writematrix(A, 'data.csv', 'Delimiter', ';');
- Если требуется экспортировать только часть массива, например, первые 100 строк:
writematrix(A(1:100, :), 'subset.csv');
- При наличии
NaN
в данных, они записываются как пустые ячейки. Чтобы задать конкретное значение для таких случаев, используйте'MissingValue'
:writematrix(A, 'data.csv', 'MissingValue', '0');
Если необходимо добавить заголовки столбцов, используйте writecell
или writetable
с предварительной конвертацией массива в таблицу:
- Создание таблицы:
T = array2table(A, 'VariableNames', {'X1','X2','X3'});
- Экспорт таблицы в CSV:
writetable(T, 'table.csv');
Для управления кодировкой файла можно указать дополнительный параметр:
writematrix(A, 'data.csv', 'Encoding', 'UTF-8');
Путь к файлу может быть абсолютным или относительным. Поддерживается экспорт в каталоги с правами на запись. При перезаписи файл автоматически заменяется без предупреждения.
Представление данных с временными метками с помощью timetable
Тип данных timetable
в MATLAB используется для хранения и обработки данных, привязанных ко времени. Каждой строке таблицы соответствует уникальное значение времени, представленное объектом datetime
или duration
.
Создание timetable
осуществляется с помощью команды timetable()
. Например:
TT = timetable(datetime(2023,1,1:5)', [10; 20; 30; 40; 50], 'VariableNames', {'Температура'});
Для сортировки строк по времени используется sortrows(TT)
. Чтобы изменить интервал или выровнять данные по заданной частоте, применяется retime()
. Например, агрегирование по среднему значению за день: retime(TT, 'daily', 'mean')
.
Синхронизация нескольких timetable
выполняется с помощью synchronize()
, что удобно при сравнении данных из разных источников. Поддерживается выравнивание по общей временной сетке и задание способа агрегации, например: synchronize(TT1, TT2, 'union', 'mean')
.
Фильтрация по времени осуществляется через логические условия: TT(TT.Time >= datetime(2023,1,2) & TT.Time <= datetime(2023,1,4), :)
. Это позволяет извлекать подмножества данных для анализа определённых периодов.
Для хранения в файле рекомендуется использовать формат .mat
, чтобы сохранить точность временных меток. Запись выполняется с помощью save filename TT
, загрузка – через load filename
.
При работе с пропущенными временными значениями можно использовать isnat()
и функции интерполяции: fillmissing(TT, 'linear')
.
Формат timetable
обеспечивает поддержку временной оси в графиках. Для построения графика: plot(TT.Time, TT.Температура)
.
Обработка и визуализация данных из Excel-файлов
Для загрузки данных из Excel-файлов в MATLAB используется функция readtable
. Она автоматически определяет типы данных и имена столбцов. Пример загрузки:
T = readtable('данные.xlsx', 'Sheet', 'Лист1');
Если требуется загрузить только часть данных, указывается диапазон:
T = readtable('данные.xlsx', 'Range', 'B2:E100');
Функция readmatrix
применима для числовых массивов без заголовков:
M = readmatrix('данные.xlsx');
Для предварительного анализа удобно использовать summary
, head
и логические фильтры. Например:
subset = T(T.Показатель > 100, :);
Для визуализации используют plot
, bar
, scatter
и heatmap
. График зависимости:
plot(T.Время, T.Значение);
Цветовую карту можно построить при помощи:
heatmap(T, 'Параметр1', 'Параметр2', 'ColorVariable', 'Интенсивность');
При работе с датами рекомендуется преобразовать столбец к формату datetime
:
T.Дата = datetime(T.Дата, 'InputFormat', 'dd.MM.yyyy');
Анализ временных рядов ведётся через timetable
:
TT = table2timetable(T, 'RowTimes', T.Дата);
Функции retime
, synchronize
и movmean
позволяют агрегировать и сглаживать данные:
TT_avg = retime(TT, 'daily', 'mean');
Для экспорта результата в Excel используется writetable
:
writetable(T, 'результат.xlsx', 'Sheet', 'Итоги');