【问题标题】:Export a matrix with symbolic variables from Matlab to Python将带有符号变量的矩阵从 Matlab 导出到 Python
【发布时间】:2018-04-08 01:46:57
【问题描述】:

我在 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']

但它没有用。我得到了这个错误,这只是一个普通的pythonkeyerror

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

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

【问题讨论】:

  • matrixkeys 是什么?让我们了解loadmat 返回的内容。我的猜测是 MATLAB 保存了一个无法转换为 numpy 结构的类和/或函数。我在以前的 SO 问题中看到了有关 MATLAB 函数和日期的问题。
  • 我从其他帖子中看到您已经知道sympynumpyscipy 没有任何符号功能,因此 loadmat 无法返回 MATLAB 等效项,即使它“理解”syms。你能做的最好的就是在sympy 中重新创建它们。

标签: python matlab scipy


【解决方案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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 2016-07-16
    • 2017-11-12
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2010-11-08
    • 2012-08-15
    相关资源
    最近更新 更多