微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。