Python np.abs能否获取数据类型=[(';real';';<;f8';),(';imag';';>;f8';)的输入数组并给出绝对值?

Python np.abs能否获取数据类型=[(';real';';<;f8';),(';imag';';>;f8';)的输入数组并给出绝对值?,python,numpy,Python,Numpy,我正在尝试将一些代码从MATLAB移植到Python。MATLAB使用abs(数据)来获得数据中复数的绝对值。我使用h5py模块将其放入一个ndarray(dim-(151402,16,64))。这个数组包含real和imag值,我想计算它们的绝对值。Numpy文档建议使用np.abs是它的函数,但是在这个数据库上使用时,我得到了这个 error --> `numpy.core._exceptions.UFuncTypeError: ufunc 'absolute' did not co

我正在尝试将一些代码从MATLAB移植到Python。MATLAB使用abs(数据)来获得数据中复数的绝对值。我使用h5py模块将其放入一个
ndarray(dim-(151402,16,64))
。这个数组包含real和imag值,我想计算它们的绝对值。Numpy文档建议使用
np.abs
是它的函数,但是在这个数据库上使用时,我得到了这个

error --> `numpy.core._exceptions.UFuncTypeError: ufunc 'absolute' did 
not contain a loop with signature matching types 
dtype([('real', '<f8'), ('imag', '<f8')]) -> dtype([('real', '<f8'), ('imag', '<f8')])`. 
error-->`numpy.core.\u exceptions.UFuncTypeError:ufunc'absolute'没有
不包含具有签名匹配类型的循环

dtype([('real','对于复杂的dtype数组,
np.abs
生成大小,如其文档中所述:

In [18]: x= np.array(1.1 - 0.2j)
In [19]: x
Out[19]: array(1.1-0.2j)
In [20]: x.dtype
Out[20]: dtype('complex128')
In [21]: np.abs(x)
Out[21]: 1.118033988749895
但是您已经将复杂数组构造(或加载)为一个
结构化数组
,带有单独的
real
imag
字段。
np.abs
没有为这种
复合数据类型
定义(大多数计算/ufunc不适用于结构化数组)

或者,我们可以使用
view
转换数据类型:

In [28]: y.view('complex')
Out[28]: array(1.1-0.2j)
In [29]: np.abs(y.view('complex'))
Out[29]: 1.118033988749895

视图
并不总是适用于复合数据类型,但这里的底层数据字节布局是相同的。

在将数据传递到下游神经网络之前,我需要将数据分为实数据和imag部分的结构。有没有办法做到这一点并计算abs值?我刚刚演示了如何从结构化数据中获取abs数组。
In [27]: np.abs(y['real']+y['imag']*1j)
Out[27]: 1.118033988749895
In [28]: y.view('complex')
Out[28]: array(1.1-0.2j)
In [29]: np.abs(y.view('complex'))
Out[29]: 1.118033988749895