使用scipy.io.savemat保存嵌套列表

这与我的上一个问题有关,可以找到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
上一篇:scipy.optimize.curve_fit错误的图(类似于移动平均值)


下一篇:样条日期时间对象的平滑线不起作用