规范化 NumPy 中的复数值 / Python
Normalizing complex values in NumPy / Python
我目前正在尝试规范化复数..
因为我没有很好的方法来做到这一点,所以我决定将我的数据集一分为二,由仅包含实部的数据和仅包含虚部的数据组成。
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
规范化后,是否应该合并两个数据集,使其 returns 成为一个具有复杂值的数据集?但我该怎么做?
数据规范化已完成,这样我就可以使用 tanh 作为激活函数,它在 -0.9 到 0.9 范围内运行 => 这就是为什么我需要将数据集规范化到这些范围内。
基本上,将涉及两个步骤:
将所有数字沿实轴和虚轴偏移最小值。
将每个除以最大值。震级。要获得复数的大小,只需使用 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. ])
我目前正在尝试规范化复数.. 因为我没有很好的方法来做到这一点,所以我决定将我的数据集一分为二,由仅包含实部的数据和仅包含虚部的数据组成。
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
规范化后,是否应该合并两个数据集,使其 returns 成为一个具有复杂值的数据集?但我该怎么做?
数据规范化已完成,这样我就可以使用 tanh 作为激活函数,它在 -0.9 到 0.9 范围内运行 => 这就是为什么我需要将数据集规范化到这些范围内。
基本上,将涉及两个步骤:
将所有数字沿实轴和虚轴偏移最小值。
将每个除以最大值。震级。要获得复数的大小,只需使用
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. ])