相信不少小伙伴都遇到过和我一样的问题,就是在尝试使用scipy.io.loadmat
将matlab
类型的数据导入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)
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包(超链接点击跳转)。
之后使用如下命令代码即可:
# 导入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.]]
"""
需要注意,data_modes = modes.get('modes')
语句中的参数'modes'
表示的是在matlab
工作区中用于保存数据的变量名称,这个一定要注意,如果变量名称给错了,那仍然无法读取到数据,会得到一个None
的返回值。对应modes
的变量如下图所示:
注意:参数是变量名,变量名,变量名,重要的事情说三遍。
上面是导入一般类型的数据,通常数据导入后在python
中以一个二维数组显示。但是对于复数类型的数据,导入python
后还需要进行一个复数类型转换,读者可以自行研究,如果有遇到相同问题解决不了的,可以在评论区留言给我,后续我会添加复数数据的导入操作方法。
如果大家觉得有用,就点个赞让更多的人看到吧~