【问题标题】:Saving Python 3-dimensional variable size array in matlab format以matlab格式保存Python 3维可变大小数组
【发布时间】:2016-10-24 12:29:23
【问题描述】:

我正在尝试以 matlab 格式保存一个 Python 3D int 数组,其中第三维是可变长度的。我想出的解决方案是

array = np.empty((FirstDim, SecondDim), dtype = object)
for i in range(FirstDim):
    for j in range(SecondDim):
        array[i][j] = ...

scipy.io.savemat('array', {'array':array})

但问题是当我在 matlab 中访问数组变量时,它实际上只是存储为一个二维数组。

load array.mat
array(1,1,2)
error: A(I,J,...): index to dimension 3 out of bounds; value 2 out of bound 1

谁能给我一些建议,以便我可以像访问 3D 数组一样访问 matlab 中的数组?谢谢!

【问题讨论】:

    标签: python arrays matlab numpy scipy


    【解决方案1】:

    因为您将 3D 数组保存为对象的 2D 数组(每个对象都是 1D 数组),Matlab 将其加载为元胞数组,其中每个元胞都是 1D 数组。您可以使用以下语法访问元胞数组中的值:

    array{1,1}(2)
    

    【讨论】:

    • 谢谢,这解决了我的问题。如果你要这样做,你还有其他更优雅的方式吗?
    • 您的解决方案似乎很好,并且是最合适的 imo。也许如果您的第三维长度变化不大,您可以用“NaN”填充您的数组,您可能会获得更好的压缩/访问速度,但您必须自己提出 OOB 错误,老实说,我不确定是否存在有所收获。如果我是你,我会坚持使用你已有的解决方案。
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多