这与我的上一个问题有关,可以找到here.我正在处理与我在该链接中描述的列表类似的列表,即markerList-因此,列表分为三个级别.我需要将此信息另存为.mat文件,但无法将其保存为正确的类型.当使用scipy.io.savemat时,它将列表保存为200x40x2的单个列表,当列表应为200个单元格的集合时,每个单元格包含40×2的单元格.
我用来保存此代码的代码是:
matdict = dict(markers = (markerList), sorted = (finalStack))
scipy.io.savemat('C:\pathname\\sortedMarkers.mat', matdict)
让我感到困惑的是,它以正确的格式(1×200个单元格,每个单元格的大小不同)保存了markerList,但没有保存finalStack(保存为200 x 40 x 2的单个).最重要的是,在我弄清楚这段代码的其余部分之前,它将正确保存finalStack-这使我认为,当要保存的数据大小不一致时,它可能另存为一个单元格. (finalStack大小一致; markerList不一致).
有没有办法将像这样的复杂数据结构另存为.mat文件?
解决方法:
按照savemat documentation,转换为numpy’objects’数组:
from scipy.io import savemat
import numpy
a = numpy.array([[1,2,3],[1,2,3]])
b = numpy.array([[2,3,4],[2,3,4]])
c = numpy.array([[3,4,5],[3,4,5]])
L = [a,b,c]
FrameStack = numpy.empty((len(L),), dtype=numpy.object)
for i in range(len(L)):
FrameStack[i] = L[i]
savemat("myfile.mat", {"FrameStack":FrameStack})
以八度为单位:
>> load myfile.mat
>> whos FrameStack
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
FrameStack 1x3 144 cell
Total is 3 elements using 144 bytes
>> whos FrameStack{1}
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
FrameStack{1} 2x3 48 int64
Total is 6 elements using 48 bytes