Импорт и экспорт данных

Импорт данных

Пусть в текущем рабочем каталоге 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)