1

現在、複雑な値を正規化しようとしています。 これを行うには良い方法がないため、私は2つのデータセットに分割することにしました。虚数部のみのデータである。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 

とは別に、それぞれを正規化は、それが複雑な値で、1つのデータセットに返すようにマージされることになったデータセット、両方ある?私をどのように行いますそれを行う?

活性化関数としてtanhを使うことができるように、データ正規化が行われます。これは、-0.9から0.9 =>の範囲で動作します。このため、これらの範囲に正規化する必要があります。

+0

複雑な配列を作成するには、 '1j'乗数を使って2つの成分を合計します。' np.allclose(x.real + 1j * x.imag、x) '。あるいは、ドットプロダクト 'np.dot([1,1j]、[x.real、x.imag])'として表現することもできます。 – hpaulj

答えて

0

基本的には、2つのステップが関与することになります。

  • は、実部と虚軸に沿って、最低ですべての数値をオフセット。

  • それぞれを最大値で除算します。マグニチュード複素数の大きさを得るには、単に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]サンプルの最小値1および2つの以上の要素を有するアレイと検証のため

Let'startを実行 - [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に削減されていることを確認するためにオフセットされた、原点から2回の距離にある別の要素を追加してみましょう -

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. ]) 
+0

..これは、0.9から-0.9の範囲で正規化しません。 –

+0

@IamnotFat通常、正規化は '0から1.0'を意味します。範囲に0.9〜-0.9の範囲を追加するように詳細に追加してください。 – Divakar

+0

申し訳ありません..追加されました –

関連する問題