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

时间:2010-03-12 15:57:26

标签: python string matlab scipy mat-file

我正在尝试使用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单元格数组中?

2 个答案:

答案 0 :(得分:12)

你需要让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采取了这种方式。

答案 1 :(得分: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的更多一般问题,但它应该有助于解决您列出的特定问题上方。