如何解决使用 h5py 在 Python 中读取复杂的 matlab 数组
嗨,我有一个由复数数组 C 和实数数组 A,B 组成的 mat 文件。当我执行以下操作时
with h5py.File('test.mat','r') as file:
A_ = np.array(file['A'])
B_ = np.array(file['B'])
C_ = np.array(file['C'])
我可以毫无问题地访问 A_ 和 B_ 但我无法访问 C_ 的虚部。
np.imag(C_)
C_.imag
这些不起作用,C_ 的类型也是无效的,它不能转换为复杂的。我收到以下错误
TypeError: 无法根据规则“不安全”将数组数据从 dtype([('real','
解决方法
让我们扩展我的评论以完成创建复数数组的任务(从实部和虚部的重新数组)。
第 1 行创建数组 C_
来模拟提取的 Matlab 数组,第 4-5 行用值填充它。
第 7 行从引用字段 cplx
和 C_
的数组 'rea'
数组创建数组 'imag'
。请注意,当项是变量(例如,不是常数)时,如何使用 *1j
来定义虚部。
In [1]: C_ = np.recarray((10,),dtype=[('real','<f8'),('imag','<f8')] )
In [2]: C_.dtype
Out[2]: dtype((numpy.record,[('real','<f8')]))
In [3]: C_.shape
Out[3]: (10,)
In [4]: C_[:]['real'] = [i for i in range(10,110,10)]
In [5]: C_[:]['imag'] = [i for i in range(1,11)]
In [6]: C_
Out[6]:
rec.array([( 10.,1.),( 20.,2.),( 30.,3.),( 40.,4.),( 50.,5.),( 60.,6.),( 70.,7.),( 80.,8.),( 90.,9.),(100.,10.)],'<f8')])
In [7]: cplx = C_['real'] + C_['imag']*1j
In [8]: cplx
Out[8]:
array([ 10. +1.j,20. +2.j,30. +3.j,40. +4.j,50. +5.j,60. +6.j,70. +7.j,80. +8.j,90. +9.j,100.+10.j])
In [9]: cplx.dtype
Out[9]: dtype('complex128')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。