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 时的值错误
使用 scipy.io.loadmat 从 .mat Matlab 文件中将字典键转换为 Python 中具有相同值的变量名