Импорт и экспорт данных
Импорт данных
Пусть в текущем рабочем каталоге MATLAB находится текстовый файл mat1.txt со следующим содержанием
1 2 3
4 5 6
7 8 9
10 11 12
Функция dlmread
Функция dlmread (чтение из текстовых файлов) предназначена для чтения матриц из текстовых файлов. Первый аргумент функции – имя файла. Результат записывается в матрицу.
>> a = dlmread('mat1.txt')
a =
1 2 3
4 5 6
7 8 9
10 11 12
Вторым аргументом можно явно указать разделитель чисел в файле, например ‘,’
>> b = dlmread('mat2.txt',',');
Чтобы узнать размер прочитанной матрицы по каждому измерению используется функция size, которая возвращает массив двух значений: количество прочитанных строк и столбцов:
>> size(b)
ans =
3 2
Чтобы узнать общее число прочитанных чисел можно перемножив размеры матрицы, используя функцию prod
>> prod(size(b))
ans =
6
или использовать функцию numel (количество всех элементов)
>> numel(b)
ans =
6
Третий и четвертый аргумент dlmread смещение строки и столбца, начиная с которых нужно начинать считывать данные из файла. Например, чтобы пропустить 1 строку и один столбец, необходимо вызвать функцию со следующими дополнительными параметрами
>> b = dlmread('mat2.txt',',', 1, 1)
b =
5 6
8 9
11 12
Чтение данных из Excel файлов
Для чтение данных из XLS файлов используется функция xlsread
>> xlsNum = xlsread('Данные.xlsx');
>> xlsNum
b =
5 6
8 9
11 12
### Функция readtable
Функция позволяет импортировать таблицы из файлов различных форматов. В отличие от результата работы функции xlsread результатом работы функции readtable является объект table, который содержит дополнительную информацию о таблице: об именах столбцов, строк. Без дополнительных указаний функция readtable считает, что в первой строке таблицы записаны имена её столбцов.
В рабочем каталоге MATLAB находится xls-файл следующего на листе “Лист1” которого находятся следующие данные:
Результатом работы функции readtable будет таблица (объект table)
>> data = readtable('Книга1.xlsx')
data =
3×3 table
Var1 COL1 COL2
______ ____ ____
'ROW1' 1.5 2
'ROW2' 1.6 3
'ROW3' 1.9 4
Первая строка в первом столбце таблицы не содержит никаких значений (ячейка А1 пустая), поэтому первому столбцу было присвоено имя автоматически Var1. Второй и третий столбцы в таблице имеют имена COL1 и COL2 соответственно. Функция readtable рассматривает эти значения как имена столбцов. Если такое поведение функции readtable нежелательно, то можно передать функции значение ‘ReadVariableNames’ равное false
>> data = readtable('Книга1.xlsx', 'ReadVariableNames', false)
data =
4×3 table
Var1 Var2 Var3
______ ______ ______
'' 'COL1' 'COL2'
'ROW1' '1.5' '2'
'ROW2' '1.6' '3'
'ROW3' '1.9' '4'
Видно, что в этом случае, поскольку столбцы исходной таблицы в таком представлении содержат неоднородные данные (и числа и строки), все значения в столбцах рассматриваются как строковые без попыток их преобразования в числовые значения. Для корректного чтения данных из таблицы ‘Книга1.xlsx’ необходимо использовать поведение функции readtable по умолчанию, т.е.
>> data = readtable('Книга1.xlsx')
data =
3×3 table
Var1 COL1 COL2
______ ____ ____
'ROW1' 1.5 2
'ROW2' 1.6 3
'ROW3' 1.9 4
В этом случае можно получить содержимое столбца, используя его имя. Например data.COL1 представляет собой матрицу столбец
>> data.COL1
ans =
1.5000
1.6000
1.9000
Столбец data.Var1 это матрица ячеек, содержащая строковые значения
>> data.Var1
ans =
3×1 cell array
{'ROW1'}
{'ROW2'}
{'ROW3'}
Список имен столбцов содержится в атрибуте (свойстве) таблицы data.VariableNames, которое считывается следующим образом
>> data.Properties.VariableNames
ans =
1×3 cell array
{'Var1'} {'COL1'} {'COL2'}
Для того, чтобы значения в первом столбце рассматривались как имена строк, необходимо использовать опцию ReadRowNames
>> data = readtable('Книга1.xlsx','ReadRowNames',true)
data =
3×2 table
COL1 COL2
____ ____
ROW1 1.5 2
ROW2 1.6 3
ROW3 1.9 4
Для чтения извлечения данных из строки по её имени используется следующий синтаксис
>> data('ROW1',:)
ans =
1×2 table
COL1 COL2
____ ____
ROW1 1.5 2
Результатом является объект типа table. Можно извлечь несколько строк по их именам, например так
>> data({'ROW1', 'ROW2'},:)
ans =
2×2 table
COL1 COL2
____ ____
ROW1 1.5 2
ROW2 1.6 3
Чтобы извлечь данные в виде матрицы необходимо использовать свойство таблицы Variables
>> data('ROW1',:).Variables
ans =
1.5000 2.0000
Для исходной таблицы это свойство вернет все числовые значения в виде матрицы
>> data.Variables
ans =
1.5000 2.0000
1.6000 3.0000
1.9000 4.0000
Экспорт данных
Сохранение таблицы в файле ‘data.txt’
writetable(data,'data.txt')
Сохранение в файле имён строк
writetable(data,'data.txt','WriteRowNames',true)