【问题标题】:Normalizing complex values in NumPy / Python在 NumPy / Python 中规范化复杂值
【发布时间】:2017-05-25 09:32:21
【问题描述】:

我目前正在尝试规范化复杂值.. 由于我没有这样做的好方法,我决定将我的数据集分成两部分,由只有实部的数据和只有虚部的数据组成。

def split_real_img(x):
    real_array = x.real
    img_array = x.imag
    return real_array, img_array

然后分别用

对每一个进行归一化
def numpy_minmax(X):
    xmin =  X.min()
    print X.min()
    print X.max()
    return (2*(X - xmin) / (X.max() - xmin)-1)*0.9

标准化后,是否应该合并两个数据集,使其返回到一个具有复杂值的数据集?但是我该怎么做呢?

数据归一化已经完成,这样我就可以使用 tanh 作为激活函数,它在 -0.9 到 0.9 => 范围内运行 => 这就是为什么我需要将数据集归一化到这些范围内的原因。

【问题讨论】:

  • 您可以通过将两个分量相加来创建一个复数数组(使用1j 乘数):np.allclose(x.real + 1j*x.imag, x)。或者可以表示为点积np.dot([1,1j],[x.real,x.imag])

标签: python-2.7 numpy normalization complex-numbers activation-function


【解决方案1】:

基本上,将涉及两个步骤:

  • 将所有数字沿实轴和虚轴偏移最小值。

  • 将每个除以最大值。震级。要获取复数的大小,只需使用np.abs()

因此,实现将是 -

def normalize_complex_arr(a):
    a_oo = a - a.real.min() - 1j*a.imag.min() # origin offsetted
    return a_oo/np.abs(a_oo).max()

用于验证的样本运行

让我们从一个数组开始,该数组至少包含一个 [0+0j] 和另外两个元素 - [x1+y1*J][y1+x1*J]。因此,它们在归一化后的大小应该是1

In [358]: a = np.array([0+0j, 1+17j, 17+1j])

In [359]: normalize_complex_arr(a)
Out[359]: 
array([ 0.00000000+0.j        ,  0.05872202+0.99827437j,
        0.99827437+0.05872202j])

In [360]: np.abs(normalize_complex_arr(a))
Out[360]: array([ 0.,  1.,  1.])

接下来,让我们为最小元素添加一个偏移量。这不应该在标准化后改变它们的大小 -

In [361]: a = np.array([0+0j, 1+17j, 17+1j]) + np.array([2+3j])

In [362]: a
Out[362]: array([  2. +3.j,   3.+20.j,  19. +4.j])

In [363]: normalize_complex_arr(a)
Out[363]: 
array([ 0.00000000+0.j        ,  0.05872202+0.99827437j,
        0.99827437+0.05872202j])

In [364]: np.abs(normalize_complex_arr(a))
Out[364]: array([ 0.,  1.,  1.])

最后,让我们添加一个距离偏移原点两倍距离的元素,以确保这个新元素的大小为1,其他元素减少到0.5 -

In [365]: a = np.array([0+0j, 1+17j, 17+1j, 34+2j]) + np.array([2+3j])

In [366]: a
Out[366]: array([  2. +3.j,   3.+20.j,  19. +4.j,  36. +5.j])

In [367]: normalize_complex_arr(a)
Out[367]: 
array([ 0.00000000+0.j        ,  0.02936101+0.49913719j,
        0.49913719+0.02936101j,  0.99827437+0.05872202j])

In [368]: np.abs(normalize_complex_arr(a))
Out[368]: array([ 0. ,  0.5,  0.5,  1. ])

【讨论】:

  • @IamnotFat Normalize 通常表示0 to 1.0。请将详细信息添加到您想要范围为0.9 to -0.9 的问题中。
猜你喜欢
  • 2020-01-20
  • 1970-01-01
  • 2014-04-22
  • 2015-06-22
  • 2021-02-16
  • 2012-02-12
  • 2016-05-16
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多