Python 到 MATLAB:使用 scipy.io 导出字符串列表

Posted

技术标签:

【中文标题】Python 到 MATLAB:使用 scipy.io 导出字符串列表【英文标题】:Python to MATLAB: exporting list of strings using scipy.io 【发布时间】:2011-01-26 21:30:20 【问题描述】:

我正在尝试使用 scipy.io 将文本字符串列表从 Python 导出到 MATLAB。我想使用 scipy.io,因为我想要的 .mat 文件应该包含数字矩阵(我学会了 here)和文本元胞数组。

我试过了:

import scipy.io
my_list = ['abc', 'def', 'ghi']
scipy.io.savemat('test.mat', mdict='my_list': my_list)

在 MATLAB 中,我加载 test.mat 并得到一个字符数组:

my_list =

adg
beh
cfi

如何让 scipy.io 将列表导出到 MATLAB 元胞数组中?

【问题讨论】:

您可能也对我的 python-in-MATLAB 项目感兴趣:github.com/kw/pymex 【参考方案1】:

看起来列表的内容已正确导出,它们只是被转置并放置在字符数组中。您可以通过转置它并使用 CELLSTR 轻松将其转换为 MATLAB 中所需的字符串单元数组,这会将每一行放在一个单独的单元格中:

>> my_list = ['adg';'beh';'cfi'];  %# Your example
>> my_list = cellstr(my_list')    %'# A 3-by-1 cell array of strings

my_list = 

    'abc'
    'def'
    'ghi'

当然,这并没有解决将数据作为元胞数组从 Python 导出到 MATLAB 的更一般问题,但它应该有助于解决您列出的特定问题以上。

【讨论】:

【参考方案2】:

您需要将 my_list 设为一个 numpy 对象数组:

import scipy.io
import numpy as np
my_list = np.zeros((3,), dtype=np.object)
my_list[:] = ['abc', 'def', 'ghi']
scipy.io.savemat('test.mat', mdict='my_list': my_list)

然后它将以单元格格式保存。将它放入 np.object 可能有更好的方法,但我从Scipy documentation 中采用了这种方式。

【讨论】:

为了后代:创建对象数组的更简单方法是np.asarray(['abc', 'def', 'ghi'], dtype='object')

以上是关于Python 到 MATLAB:使用 scipy.io 导出字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 scipy.io.loadmat 在 python 中加载 matlab 表

通过Scipy和Numpy使用Python将数据拟合到ODE系统

使用 scipy.io loadmat 将 Matlab 结构导入 python 时的值错误

Python读写mat文件(使用scipy.io)

使用 scipy.io.loadmat 从 .mat Matlab 文件中将字典键转换为 Python 中具有相同值的变量名

计算性能 scipy weibull min fit vs Matlab wblfit