相信不少小伙伴都遇到过和我一样的问题,就是在尝试使用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
后还需要进行一个复数类型转换,读者可以自行研究,如果有遇到相同问题解决不了的,可以在评论区留言给我,后续我会添加复数数据的导入操作方法。
到此这篇关于如何将matlab数据导入到Python中使用的文章就介绍到这了,更多相关matlab数据导入到Python中使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!