Импорт [] для файла MAT, содержащего структурные массивы - Импортирует только первый элемент? - PullRequest
5 голосов
/ 04 июля 2011

Я пытаюсь импортировать данные из сохраненного массива структуры MATLAB, но похоже, что Mathematica импортирует только первый элемент.

MATLAB

blank = struct('x', [], 'y', [], 'z', []);
data = repmat(blank, 1, 10);

for i = 1:10
    data(i) = struct('x', i, 'y', i * 2, 'z', i * 3);
end

save('test.mat', 'data');

Mathematica

In[76]:= Import["test.mat", "LabeledData"]
Out[76]= {"data" -> {"x" -> {{1.}}, "y" -> {{2.}}, "z" -> {{3.}}}}

Кто-нибудь знает, почему это происходит?

В качестве временного исправления я просто прибег к хранению нескольких структур в массиве ячеек, т.е.

data{i} = struct(...)

Кажется, Mathematicaбыть в состоянии справиться с этим хорошо.

Ответы [ 2 ]

2 голосов
/ 02 мая 2013

Существует пакет Mathematica для взаимодействия с MATLAB, который может передавать структуры из MATLAB.Смотрите здесь: MATLink .

Вот как вы делаете перевод в MATLink:

Needs["MATLink`"]

MEvaluate["
 blank = struct('x', [], 'y', [], 'z', []);
 data = repmat(blank, 1, 10);

 for i = 1:10
     data(i) = struct('x', i, 'y', i * 2, 'z', i * 3);
 end"]

MGet["data"]

{{"x" -> 1., "y" -> 2., "z" -> 3.}, {"x" -> 2., "y" -> 4., 
  "z" -> 6.}, {"x" -> 3., "y" -> 6., "z" -> 9.}, {"x" -> 4., 
  "y" -> 8., "z" -> 12.}, {"x" -> 5., "y" -> 10., 
  "z" -> 15.}, {"x" -> 6., "y" -> 12., "z" -> 18.}, {"x" -> 7., 
  "y" -> 14., "z" -> 21.}, {"x" -> 8., "y" -> 16., 
  "z" -> 24.}, {"x" -> 9., "y" -> 18., "z" -> 27.}, {"x" -> 10., 
  "y" -> 20., "z" -> 30.}}

Отказ от ответственности: Я один из разработчиков MATLink.

0 голосов
/ 04 июля 2011

Я не могу реально объяснить поведение, но для того, чтобы иметь возможность читать файлы в Mathematica, лучше указать версию Matlab, которую вы используете.В MATLAB попробуйте сохранить данные с версией 6.

>> save('test.mat', '-v6', 'data')

Затем в mathematica:

In[1]:= Import["test.mat", "LabeledData"]
Out[1]= {"data" -> {"x" -> {{1.}}, "y" -> {{2.}}, "z" -> {{3.}}}, {{2.}}, {{4.}}, {{6.}}, {{3.}}, {{6.}}, {{9.}}, {{4.}}, {{8.}}, {{12.}}, {{5.}}, {{10.}}, {{15.}}, {{6.}}, {{12.}}, {{18.}}, {{7.}}, {{14.}}, {{21.}}, {{8.}}, {{16.}}, {{24.}}, {{9.}},{{18.}}, {{27.}}, {{10.}}, {{20.}}, {{30.}}}

Я пытался сохранить с v4, но это не работает в MATLAB.Обратите внимание, что в документации Mathematica говорится, что «Импорт полностью поддерживает версии 4 и 5 формата MAT».Надеюсь, это поможет.

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