使用 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')
您好,我有一个 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')