• 将matlab数据导入到Python中使用


    相信不少小伙伴都遇到过和我一样的问题,就是在尝试使用scipy.io.loadmatmatlab类型的数据导入python中的时候遇到如下错误提示。

    import scipy as sc
    
    # 设定需要导入的matlab数据目录
    path_TE00 = r"D:\Window自带文件夹\桌面\PIC Design\Lumerical\Tutorials\T02_Taper_2D_PropagateAlongX\taper_modes.mat"
    # 读取.mat类型数据
    data = sc.io.loadmat(path_TE00)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    Traceback (most recent call last):
      File "D:\Window自带文件夹\桌面\Calculation\debug.py", line 14, in <module>
        data = sc.io.loadmat(path_TE00)
      File "D:\Study Softwares\Python 3.9.11\lib\site-packages\scipy\io\matlab\_mio.py", line 225, in loadmat
        MR, _ = mat_reader_factory(f, **kwargs)
      File "D:\Study Softwares\Python 3.9.11\lib\site-packages\scipy\io\matlab\_mio.py", line 80, in mat_reader_factory
        raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
    NotImplementedError: Please use HDF reader for matlab v7.3 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这个提示的意思就是说,当matlab的版本高于7.3时,使用sc.io.loadmat()去导入matlab文件就变得不可行了。并且提示了我们应该使用HDF reader包去解决这个问题。我相信有很多小伙伴去尝试了,但是依然无法导入,这里做一下说明。首先,在windows命令行中使用如下命令安装HDF reader包。具体教程可以查看------Python 使用pip在windows命令行中安装HDF reader包(超链接点击跳转)。

    之后使用如下命令代码即可:

    # 导入HDF reader包
    import h5py
    
    # 设定需要导入的matlab数据目录
    path_TE00 = r"D:\Window自带文件夹\桌面\PIC Design\Lumerical\Tutorials\T02_Taper_2D_PropagateAlongX\taper_modes.mat"
    # 读取.mat类型数据
    modes = h5py.File(path_TE00, "r")
    # 获取导入的matlab数据
    data_modes = modes.get('modes')
    # 将导入的数据转换为ndarray格式
    data_modes_final = np.array(data_modes)
    # 打印导入后的数据
    print(data_modes_final)
    """
    result:
    [[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
      19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
      37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.]]
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    需要注意,data_modes = modes.get('modes')语句中的参数'modes'表示的是在matlab工作区中用于保存数据的变量名称,这个一定要注意,如果变量名称给错了,那仍然无法读取到数据,会得到一个None的返回值。对应modes的变量如下图所示:
    请添加图片描述
    注意:参数是变量名,变量名,变量名,重要的事情说三遍。

    上面是导入一般类型的数据,通常数据导入后在python中以一个二维数组显示。但是对于复数类型的数据,导入python后还需要进行一个复数类型转换,读者可以自行研究,如果有遇到相同问题解决不了的,可以在评论区留言给我,后续我会添加复数数据的导入操作方法。

    如果大家觉得有用,就点个赞让更多的人看到吧~

  • 相关阅读:
    C#WPF动态资源和静态资源应用实例
    知网G4《基础教育论坛》期刊投稿邮箱
    在T507开发板上移植ubuntu系统
    在 WSL2 上部署 PyTorch
    pyinstaller打包python脚本为exe可执行文件实例:错误排查小脚本
    Crypto量化高频体验总结
    java智慧停车系统源码
    【逗老师的无线电】MOTOTRBO CPS导入DMR ID通信录的骚操作
    项目管理中最常见的问题有哪些?
    翻译:使用 CoreWCF 升级 WCF 服务到 .NET 6
  • 原文地址:https://blog.csdn.net/u011699626/article/details/127586209