使用 h5py 读取 Python 中的复杂 matlab 数组

Reading complex matlab arrays in Python with h5py

您好,我有一个 mat 文件,它由复数组 C 和实数组 A,B 组成。当我执行以下操作时

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_ 的类型是 void,不能转换为复数。我收到以下错误

类型错误:无法将数组数据从 dtype([('real', '

让我们扩展我的评论以完成创建复数数组的任务(来自实部和虚部的重新排列)。

第 1 行创建数组 C_ 以模拟提取的 Matlab 数组,第 4-5 行用值填充它。
第 7 行从数组 C_ 数组引用字段 'rea''imag' 创建数组 cplx。请注意当项是变量(例如,不是常数)时如何使用 *1j 来定义虚部。

In [1]: C_ = np.recarray((10,),dtype=[('real','<f8'), ('imag','<f8')] )
In [2]: C_.dtype
Out[2]: dtype((numpy.record, [('real', '<f8'), ('imag', '<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.)],
          dtype=[('real', '<f8'), ('imag', '<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')