Как передать массив ячеек из 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)
Другие вопросы по тегам