如何将单元格数组从matlab传递给python?

时间:2017-10-26 22:23:37

标签: python matlab cell-array

我在Matlab编码的结果中有单元格数组,我希望在Python的代码中使用这个结果。我有没有办法将Cell数组从Matlab传递给Python? 我的单元格数组包含2列和45行。第一列包含名称,另一列包含另一个2number的单元格数组。 例如,如果在MATLAB中打开它,则此单元格数组中的一行可以是这样的:'Pit'25x2 double

1 个答案:

答案 0 :(得分:0)

这是非嵌套单元格数组的解决方案。它的工作原理是将单元格数组的内容写入一个文件,然后由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

这将在文件data.txt中存储单元格数组的文字Python列表表示。

if语句块负责将不同的元素类型转换为其字符串表示形式。如果你真的需要嵌套的单元格数组,你可以在这里为单元格数组添加一个新条目并利用递归。

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)