Lebih
Cara menormalkan array di NumPy?
Saya ingin memiliki norma dari satu NumPy array. Lebih khusus, saya mencari versi yang setara dari fungsi ini
def normalize(v):
norm = np.linalg.norm(v)
if norm == 0:
return v
return v / norm
Apakah ada sesuatu seperti itu di skearn
atau numpy
?
Fungsi ini bekerja dalam situasi di mana v
adalah 0 vektor.
165
12
Jika anda're menggunakan scikit-belajar anda dapat menggunakan
sklearn.preprocessing.normalize
:Aku akan setuju bahwa itu lebih baik jika fungsi tersebut adalah bagian dari baterai yang disertakan. Tapi itu bukan't, sejauh yang saya tahu. Di sini adalah versi untuk sewenang-wenang kapak, dan memberikan kinerja yang optimal.
Anda dapat menentukan ord untuk mendapatkan L1 norma. Untuk menghindari nol divisi I menggunakan eps, tapi yang's mungkin tidak besar.
Jika anda memiliki data multidimensi dan ingin masing-masing sumbu normal untuk max atau sum:
Menggunakan numpys puncak ke puncak fungsi.
Ini juga mungkin bekerja untuk anda
tapi gagal ketika
v
memiliki panjang 0.Ada juga fungsi
unit_vector()
untuk menormalkan vektor di tempat transformasi modul oleh Christoph Gohlke:Jika anda ingin menormalkan n dimensi vektor fitur yang tersimpan di sebuah tensor 3D, anda juga bisa menggunakan PyTorch:
Jika anda're bekerja dengan 3D vektor, anda dapat melakukan ini dengan singkat menggunakan toolbelt vg. It's lapisan cahaya di atas numpy dan mendukung nilai-nilai tunggal dan ditumpuk vektor.
Saya membuat perpustakaan di startup terakhir saya, di mana ia termotivasi dengan menggunakan seperti ini: ide-ide sederhana yang terlalu verbose di NumPy.
Yang anda sebutkan sci-kit belajar, jadi saya ingin berbagi solusi lain.
sci-kit belajar
MinMaxScaler
Dalam sci-kit belajar, ada API yang disebut
MinMaxScaler
yang dapat menyesuaikan jangkauan nilai yang anda inginkan.Hal ini juga menangani NaN masalah bagi kita.
Contoh kode
Kode ini sederhana, cukup ketik
Referensi
Jika anda don't perlu presisi maksimal, fungsi anda dapat dikurangi dengan:
Tanpa
sklearn
dan menggunakannumpy
. Hanya mendefinisikan fungsi:.Dengan asumsi bahwa baris ini adalah variabel dan kolom sampel (
sumbu= 1
):`` impor numpy sebagai np
Contoh array
X = np.array([[1,2,3],[4,5,6]])
def stdmtx(X): berarti = X. berarti(axis =1) pms = X. std(axis= 1, high aa=1) X= X - means[:, np.newaxis] X= X / pms[:, np.newaxis] kembali np.nan_to_num(X)
``
output:
`` X array([[1, 2, 3], [4, 5, 6]])
stdmtx(X) array([[-1., 0., 1.], [-1., 0., 1.]])
``
Jika anda bekerja dengan array multidimensi berikut solusi cepat adalah mungkin.
Mengatakan kami telah 2D array, yang kita inginkan untuk menormalkan terakhir oleh axis, sementara beberapa baris yang memiliki nol norma.
``python impor numpy sebagai np arr = np.array([ [1, 2, 3], [0, 0, 0], [5, 6, 7] ], dtype=np.float)
panjang = np.linalg.norma(arr, axis=-1) cetak(panjang) # [ 3.74165739 0. 10.48808848] arr[panjang > 0] = arr[panjang > 0] / panjang[panjang > 0][:, np.newaxis] cetak(arr)
[[0.26726124 0.53452248 0.80178373]
[0. 0. 0. ]
[0.47673129 0.57207755 0.66742381]]
``