【发布时间】:2013-11-16 20:21:40
【问题描述】:
我正在尝试在 python 中创建一个 Matlab 单元格数组并将其保存为 .mat 文件,但是当所有单元格包含 2 个值时遇到问题:
import scipy.io as sio
twoValues = {'a': array([[array([[2, 2]]), array([[3, 3]])]])}
sio.savemat('test.mat',twoValues)
在 Matlab 中:
load('test.mat')
>>> a
a(:,:,1,1) =
2 3
a(:,:,1,2) =
2 3
>>> class(a)
ans =
int32
回到python:
threeValues = {'a': array([[array([[2, 2, 2]]), array([[3, 3]])]])}
sio.savemat('test.mat',threeValues)
在 Matlab 中:
>>> a
a =
[3x1 int32] [2x1 int32]
>>> class(a)
ans =
cell
这是什么原因?
【问题讨论】:
-
array()试图以最有效的方式打包你的值,因为你没有指定dtype,它必须猜测如何存储它。当您的尺寸匹配时,一个简单的矩阵显然是首选。到目前为止,当尺寸匹配时,我无法将其强制转换为单元格数组。 -
@CaptainMurphy 正如您在我的回答中看到的,您必须使用
dtype=object创建一个数组。