将Python中的字符串列表导出到MATLAB使用scipy.io

13 投票
2 回答
9247 浏览
提问于 2025-04-15 20:21

我想把一串文本字符串从Python导出到MATLAB,使用的是scipy.io这个库。我选择scipy.io是因为我希望生成的.mat文件里既包含数字矩阵(我已经学会了怎么做,具体可以参考这里),也包含文本单元数组。

我尝试了:

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的单元数组呢?

2 个回答

1

看起来这个列表的内容导出得挺好的,只是它们被转置了,并放在了一个字符数组里。你可以通过转置它并使用 CELLSTR 函数,轻松地把它转换成你想要的字符串单元格数组,这样每一行就会放在一个单独的单元格里:

>> 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时更普遍的问题,但它应该能帮助你解决上面提到的具体问题。

13

你需要把 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 的文档 里的方法来的。

撰写回答