Scipy savemat / loadmat - 如何保留一维数组与长度为 1 维的二维数组

问题描述

使用 scipy.io.savemat 和 scipy.io.loadmat 保存和加载不区分一维 numpy 数组和一个长度为 1 维的二维 numpy 数组。

在下面的示例中,如何让 a1 与 a 具有相同的形状,而 b1 与 b 具有相同的形状?

    import numpy as np
    from scipy import io

    a = np.array([1,2,3])
    b = np.array([[1],[2],[3]])
    c = np.array([[1,10],[2,20],[3,30]])

    print(f'a: {a.shape}')
    print(f'b: {b.shape}')
    print(f'c: {c.shape}')

    io.savemat('test.mat',{'a': a,'b': b,'c': c},appendmat = False,oned_as='row')
    ##################################################################################
    loadedData = io.loadmat('test.mat',squeeze_me = False)
    a1 = loadedData['a']
    b1 = loadedData['b']
    c1 = loadedData['c']
    print(f'a1: {a1.shape}')
    print(f'b1: {b1.shape}')
    print(f'c1: {c1.shape}')

预期结果:

    a: (3,)
    b: (3,1)
    c: (3,2)
    a1: (3,)
    b1: (3,1)
    c1: (3,2)

实际结果:

    a: (3,2)
    a1: (1,3)
    b1: (3,2)

什么不起作用?

我已经尝试了“oned_as”、“squeeze_me”、“struct_as_record”和“matlab_compatible”参数的所有排列。更改“oned_as”会在 (1,3) 和 (3,1) 之间切换 a1。打开“squeeze_me”修复 a1,但导致 b1 具有形状 (3,)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)