Как передать массив ячеек из Matlab в Python?
У меня есть массив ячеек в результате моего кодирования в Matlab, и я хочу использовать этот результат в моем коде в Python. И есть ли способ передать массив Cell из Matlab в Python? мой массив ячеек содержит 2 столбца и 45 строк. первые столбцы содержат имена, а другие содержат другой массив ячеек из 2number. например, одна строка в этом массиве ячеек может быть такой, если открыть ее в MATLAB: 'Pit' 25x2 double
1 ответ
Вот решение для не вложенных клеточных массивов. Он работает, записывая содержимое массива ячеек в файл, который затем читается Python.
Код Matlab
cell2pylist
здесь происходит волшебство, но я включил и основную функцию.
function main
% Generate some random 2D cell array
c = cell(4, 3);
for i = 1:numel(c)
c{i} = rand();
end
c{2} = []; c{5} = 'hello'; c{11} = 42;
% Dump as literal Python list
cell2pylist(c, 'data.txt')
end
function cell2pylist(c, filename)
c = permute(c, ndims(c):-1:1);
% Get str representationelement
output = '';
for i = 1:numel(c)
if isempty(c{i})
el = 'None';
elseif ischar(c{i}) || isstring(c{i})
el = ['"', char(string(c{i})), '"'];
elseif isa(c{i}, 'double') && c{i} ~= int64(c{i})
el = sprintf('%.16e', c{i});
else
el = [char(string(c{i}))];
end
% Add to output
output = [output, el, ', '];
end
output = ['[', output(1:end-1), ']'];
% Print out
fid = fopen(filename, 'w');
fprintf(fid, '%s\n', output);
fclose(fid);
end
Это сохранит буквенное представление списка Python массива ячеек в файле data.txt
,
Блок из if
Statement заботится о преобразовании различных типов элементов в его строковое представление. Здесь вы можете добавить новую запись для массивов ячеек и использовать рекурсию, если вам действительно нужны вложенные ячейки.
Код Python
Теперь, чтобы прочитать в "массиве ячеек" из Python, сделайте
import ast, numpy as np
shape = (4, 3)
c = np.array(ast.literal_eval(open('data.txt').read()), dtype=object).reshape(shape)
print(c)