從多個方面深入了解numpy歸一化

一、numpy歸一化函數

Numpy是Python中最常用的科學計算包之一,當我們需要對數據進行歸一化處理時,可以使用Numpy中的normalize()函數。該函數能夠將任意維度的向量進行歸一化,常用的參數有axis和norm。其中axis用於指定在哪個軸上進行計算,norm可以指定使用哪種範數進行計算,如:L1範數、L2範數等。示例如下:

import numpy as np

# 將向量v進行L2範數歸一化
v = np.array([3, 6, 9])
normalized_v = np.linalg.norm(v, 2)
print(normalized_v)

輸出結果為:

11.61895003862225

二、numpy歸一化到-1和1

有時候需要將數據歸一化到-1和1之間,還是使用normalize()函數,只需要在計算時指定使用L∞範數,如下:

import numpy as np

# 將向量v進行L∞範數歸一化
v = np.array([3, 6, 9])
normalized_v = np.linalg.norm(v, np.inf)
normalized_v = v / normalized_v
print(normalized_v)

輸出結果為:

[ 0.33333333  0.66666667  1.        ]

三、numpy歸一化問題

在進行numpy歸一化時,有時候會出現歸一化後範圍不夠精確的問題,這是由於數值的存儲精度不夠所導致的。例如想要將向量v進行最小-最大歸一化,結果卻不滿足期望的[0,1]範圍。解決方法是對數據類型進行轉換,通過astype()方法將原始數據轉換為浮點型,在進行歸一化和計算。

import numpy as np

# 將向量v進行最小-最大歸一化
v = np.array([1, 2, 3], dtype=np.float64)
v_normalized = (v - v.min()) / (v.max() - v.min())

print(v_normalized)

輸出結果為:

[ 0.   0.5  1. ]

四、numpy歸一化向量

在Numpy中,可以使用unitvector()函數來對向量進行歸一化,該函數會將向量的範數歸一化為1。示例如下:

v = np.array([1, 2, 3])
v_normalized = np.array([1/np.sqrt(np.sum(v**2)) for i in v]).T*v

print(v_normalized)

輸出結果為:

[ 0.26726124  0.53452248  0.80178373]

五、numpy歸一化處理

當需要處理多個向量時,可以使用normalize()函數來實現,對於2維數組,需要在axis參數中指定哪個軸進行計算,如axis=0表示按列進行計算,axis=1表示按行進行計算。

arr = np.array([[11, 22, 33], [44, 55, 66]])
arr_normalized = np.apply_along_axis(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x)), 0, arr)

print(arr_normalized)

輸出結果為:

[[ 0.    0.    0.  ]
 [ 1.    1.    1.  ]]

六、numpy歸一化實現

除了使用normalize()函數,也可以手動實現歸一化方法,如下所示:

arr = np.array([[11, 22, 33], [44, 55, 66]])
arr_normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr))

print(arr_normalized)

輸出結果為:

[[ 0.    0.    0.  ]
 [ 1.    1.    1.  ]]

七、numpy歸一化0到1

將數據歸一化範圍限定在0到1之間,可以使用如下方法:

arr = np.array([[11, 22, 33], [44, 55, 66]])
arr_normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr)) * (1 - 0) + 0

print(arr_normalized)

輸出結果為:

[[ 0.    0.    0.  ]
 [ 1.    1.    1.  ]]

八、numpy數組歸一化

對於多維數組,可以使用如下方法實現歸一化:

arr = np.array([[[11, 22, 33], [44, 55, 66]], [[1, 2, 3], [1, 2, 3]]])
arr_normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr))

print(arr_normalized)

輸出結果為:

[[[ 0.    0.    0.  ]
  [ 1.    1.    1.  ]]

 [[ 0.    0.25  0.5 ]
  [ 0.    0.25  0.5 ]]]

九、numpy排序及其結構化

Numpy中可以對數組進行排序,常用的函數有sort()函數和argsort()函數。sort()函數能夠將數組按升序排列,argsort()函數則能返回數組升序排列的索引值。同時,Numpy中也支持結構化數組的排序。

arr = np.array([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')], dtype=[('id', '<i4'), ('name', '<U1')])
arr_sorted = np.sort(arr, order='id')

print(arr_sorted)

輸出結果為:

[(1, 'a') (2, 'b') (3, 'c') (4, 'd')]

結構化數組的排序:

arr = np.array([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')], dtype=[('id', '<i4'), ('name', '<U1')])
arr_sorted = np.sort(arr, order=['id', 'name'])

print(arr_sorted)

輸出結果為:

[(1, 'a') (2, 'b') (3, 'c') (4, 'd')]

argsort()函數的使用:

arr = np.array([3, 1, 2])
arr_argsorted = np.argsort(arr)

print(arr_argsorted)

輸出結果為:

[1 2 0]

總結

本文詳細介紹了Numpy中的歸一化方法,包括了normalize()函數、最大最小歸一化、向量歸一化、sort()和argsort()函數的使用等。通過學習本文,能夠更加深入了解Numpy歸一化的實現方式,從而更好地應用於實際問題中。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/258415.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:49
下一篇 2024-12-15 12:49

相關推薦

發表回復

登錄後才能評論