将带有符号变量的矩阵从Matlab导出到Python

时间:2018-04-08 01:46:58

标签: python matlab scipy

我在MATLAB中有一个带符号变量的矩阵,如下所示:

syms x
f = [x^2 x^3 x^4];
save ('sym.mat','f')

因此我将f矩阵保存为sym.mat。现在我想将这个矩阵导入python。所以我尝试了这个:

import scipy.io as sio
matrix = sio.loadmat('sym.mat')
sym = matrix['f']

但它没有用。我收到此错误,这只是一个常规的python keyerror

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'f'

但是如果f不是符号矩阵,则此代码可以正常工作。有关如何使用符号变量处理这些矩阵的任何想法吗?

1 个答案:

答案 0 :(得分:1)

Scipy无法加载MATLAB符号变量。

处理问题的最好方法是将符号矩阵转换为字符矩阵(不是matlab字符串,因为它也会引起错误)

这就是我的意思:

在MATLAB中,您可以执行以下操作:

syms x
f = [x^2 x^3 x^4];
for i = 1:numel(f)
    if i == 1
        f2 = char(f(i));
    else
        f2 = [f2 ',' char(f(i))];

    end
end

save('sym.mat','f2')

这将显示:

x^2,x^3,x^4

现在,在python中,您可以执行以下操作:

import scipy.io as sio
path = 'H:\MatlabScripts'
matrix = sio.loadmat(path + '\sym.mat')
sym = matrix['f2'][0].split(',')
print(sym)

结果将是:

['x^2', 'x^3', 'x^4']