Объединение файлов .mat в одну структуру данных.
. В общем случае неправильно Нет простого способа объединить файлы .mat в один файл .mat (поскольку все они имеютте же имена переменных, но с разными данными) .
Допустим, у вас есть два файла data1.mat
и data2.mat
, и каждый из них содержит две переменные a
и b
.Вы можете сделать:
>> s = load('data1')
s =
struct with fields:
a: 'foo'
b: 3
>> s(2) = load('data2')
s =
1×2 struct array with fields:
a
b
Теперь у вас есть массив массивов (см. Примечание ниже) .Вы можете получить доступ к данным в нем следующим образом:
>> s(1).a
ans =
'foo'
>> s(2).a
ans =
'bar'
Но вы также можете получить все значения сразу для каждого поля, как список через запятую , который вы можете назначитьк массиву или матрице ячеек:
>> s.a
ans =
'foo'
ans =
'bar'
>> allAs = {s.a}
allAs =
1×2 cell array
{'foo'} {'bar'}
>> allBs = [s.b]
allBs =
3 4
Примечание: Удивительно, но кажется, что вам нужно создать структуру с правильными полями, прежде чем вы сможете назначить ее с помощью индексации.Другими словами
s = struct;
s(1) = load('data1')
не будет работать, но
s = struct('a', [], 'b', [])
s(1) = load('data1')
в порядке.
Создание индекса для файлов .mat
Если вам не нужно искать по всем данным в каждом файле .mat, только по определенным полям, вы можете создать индекс в MATLAB, содержащий только соответствующие метаданные из каждого файла .mat плюс ссылку (например, имя файла)в сам файл.Это менее надежное решение в качестве долгосрочного решения, поскольку необходимо убедиться, что индекс синхронизирован с файлами, но для его настройки требуется меньше усилий.
Сведение структуры данных в базу данных, совместимуюtable
Если вы действительно хотите сохранить все в базе данных, вы можете преобразовать свою структуру данных в табличную форму, где любые многомерные элементы, такие как структуры или массивы, «сплющиваются» в строку таблицы с однимскалярное значение для (с соответствующим именем) табличной переменной.
Например, если у вас есть структура s
с полями s.a
и s.b
, а s.b
- матрица 2 x 2, вы можете вызывать переменные s_a
, s_b_1_1
,s_b_1_2
, s_b_2_1
и s_b_2_2
- возможно, не идеальный дизайн базы данных, но вы поняли идею.
Вы должны быть в состоянии адаптировать код в этом ответе и / или представлениях обмена файлами MATLAB flattenstruct2cell и flatten-nested-cell-arrays для удовлетворения ваших потребностей.