将字符串列表导出为普通字符矩阵(非单元数组)的Mat文件
这段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来去掉多余的空格)。