相信不少小伙伴都遇到过和我一样的问题,就是在尝试使用scipy.io.loadmat 将matlab 类型的数据导入python 中的时候遇到如下错误提示。
import scipy as sc
path_TE00 = r"D:\Window自带文件夹\桌面\PIC Design\Lumerical\Tutorials\T02_Taper_2D_PropagateAlongX\taper_modes.mat"
data = sc.io.loadmat(path_TE00)
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
这个提示的意思就是说,当matlab 的版本高于7.3 时,使用sc.io.loadmat() 去导入matlab 文件就变得不可行了。并且提示了我们应该使用HDF reader 包去解决这个问题。我相信有很多小伙伴去尝试了,但是依然无法导入,这里做一下说明。首先,在windows 命令行中使用如下命令安装HDF reader 包。具体教程可以查看------Python 使用pip在windows命令行中安装HDF reader包(超链接点击跳转)。
之后使用如下命令代码即可:
import h5py
path_TE00 = r"D:\Window自带文件夹\桌面\PIC Design\Lumerical\Tutorials\T02_Taper_2D_PropagateAlongX\taper_modes.mat"
modes = h5py.File(path_TE00, "r")
data_modes = modes.get('modes')
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.]]
"""
需要注意,data_modes = modes.get('modes') 语句中的参数'modes' 表示的是在matlab 工作区中用于保存数据的变量名称,这个一定要注意,如果变量名称给错了,那仍然无法读取到数据,会得到一个None 的返回值。对应modes 的变量如下图所示: 注意:参数是变量名,变量名,变量名,重要的事情说三遍。
上面是导入一般类型的数据,通常数据导入后在python 中以一个二维数组显示。但是对于复数类型的数据,导入python 后还需要进行一个复数类型转换,读者可以自行研究,如果有遇到相同问题解决不了的,可以在评论区留言给我,后续我会添加复数数据的导入操作方法。
如果大家觉得有用,就点个赞让更多的人看到吧~
|