将字符串列表导出为普通字符矩阵(非单元数组)的Mat文件

2 投票
1 回答
5151 浏览
提问于 2025-04-17 02:33

这段Python代码在.mat文件中创建了一个叫“STRINGS”的单元格:

data = {"STRINGS": numpy.empty((0),dtype=numpy.object)}
data["STRINGS"] = numpy.append( data["STRINGS"], "Some string" )
scipy.io.savemat( output_mat_file, data )

在Matlab中,我得到了单元格STRINGS:

>> STRINGS{1}

ans =

Some string

我该如何得到普通的矩阵呢?比如:

>> strings(1,:) = char('Some ');
>> strings(1,:)

ans =

Some 

编辑

如果我运行以下代码,我会得到一个搞错的数组。

Python:

list = ['hello', 'world!!!']
scipy.io.savemat(output_mat_file, mdict={'list':list})

Matlab:

>> list
list =
hlo wrd!

1 个回答

3

在MATLAB中,单元数组是用来存放不同类型数据的容器,而矩阵则不一样,矩阵里的所有元素必须是同一种类型(比如都是数字或者都是字符)。

矩阵的形状是矩形的(所以如果你在每一行的二维矩阵中存放字符串,它们的长度必须相同,或者用空格填充)。这个规则也适用于多维矩阵。

在MATLAB中,单元数组相当于Python中的列表:

Python

x = [1, 10.0, 'str']
x[0]

MATLAB

x = {int32(1), 10, 'str'}
x{1}

编辑:

这里有一个例子来展示它们之间的区别:

Python

import numpy
import scipy.io

list = ['hello', 'world!!!']
scipy.io.savemat('file.mat', mdict={'list':list})

list2 = numpy.array(list, dtype=numpy.object)
scipy.io.savemat('file2.mat', mdict={'list2':list2})

MATLAB

>> load file.mat
>> load file2.mat
>> whos list list2
  Name       Size            Bytes  Class    Attributes

  list       2x8                32  char               
  list2      2x1               146  cell   

现在我们可以这样访问字符串:

>> list(1,:)
ans =
hello   

>> list2{1}
ans =
hello

注意,在矩阵的情况下,字符串是用空格填充的,以确保所有字符串的长度相同(你可以使用STRTRIM来去掉多余的空格)。

撰写回答