13

我正在尝试使用 scipy.io 将文本字符串列表从 Python 导出到 MATLAB。我想使用 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 元胞数组中?

4

2 回答 2

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 文档中采用了这种方法。

于 2010-03-12T16:45:43.293 回答
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的更普遍问题,但它应该有助于解决您上面列出的具体问题。

于 2010-03-12T16:35:55.797 回答