Setelah melakukan beberapa pemrosesan pada array audio atau gambar, perlu dinormalisasi dalam rentang sebelum dapat ditulis kembali ke file. Ini bisa dilakukan seperti ini:
# Normalize audio channels to between -1.0 and +1.0
audio[:,0] = audio[:,0]/abs(audio[:,0]).max()
audio[:,1] = audio[:,1]/abs(audio[:,1]).max()
# Normalize image to between 0 and 255
image = image/(image.max()/255.0)
Apakah ada cara fungsi kenyamanan yang kurang verbose untuk melakukan ini? matplotlib.colors.Normalize()
sepertinya tidak berhubungan.
Jika array berisi data positif dan negatif, saya akan pergi dengan:
Jika array berisi
nan
, satu solusi bisa dengan menghapusnya sebagai:Namun, tergantung pada konteksnya Anda mungkin ingin memperlakukan secara
nan
berbeda. Misalnya menginterpolasi nilai, mengganti dengan misalnya 0, atau meningkatkan kesalahan.Akhirnya, layak disebut bahkan jika itu bukan pertanyaan OP, standardisasi :
sumber
scipy.stats.zscore
.f = a / np.max(np.abs(a))
... kecuali seluruh array bernilai nol (hindari DivideByZero).numpy.ptp()
mengembalikan 0, jika itu adalah kisaran, tetapinan
jika ada satunan
dalam array. Namun, jika rentangnya 0, normalisasi tidak ditentukan. Ini menimbulkan kesalahan ketika kami mencoba untuk membagi dengan 0.Anda juga dapat mengubah skala menggunakan
sklearn
. Keuntungannya adalah Anda dapat menyesuaikan normalisasi standar deviasi, di samping mean-centering data, dan Anda dapat melakukan ini pada sumbu, fitur, atau catatan.Argumen kata kunci
axis
,with_mean
,with_std
jelas diri, dan ditampilkan dalam keadaan standar. Argumencopy
melakukan operasi di tempat jika diatur keFalse
. Dokumentasi di sini .sumber
Anda dapat menggunakan versi "i" (seperti pada idiv, imul ..), dan tidak terlihat setengah buruk:
Untuk kasus lain, Anda dapat menulis fungsi untuk menormalkan array n-dimensi dengan colum:
sumber
/=
bukan= .. / ..
Anda mencoba skala minimum nilai
audio
antara -1 dan +1 danimage
antara 0 dan 255.Menggunakan
sklearn.preprocessing.minmax_scale
, harus dengan mudah menyelesaikan masalah Anda.misalnya:
dan
Catatan : Tidak perlu bingung dengan operasi yang menskala norma (panjang) vektor ke nilai tertentu (biasanya 1), yang juga biasa disebut sebagai normalisasi.
sumber
Solusi sederhana adalah menggunakan scaler yang ditawarkan oleh perpustakaan sklearn.preprocessing.
Kesalahan X_rec-X akan menjadi nol. Anda dapat menyesuaikan feature_range untuk kebutuhan Anda, atau bahkan menggunakan skaler standar sk.StandardScaler ()
sumber
Saya mencoba mengikuti ini , dan mendapat kesalahan
The
numpy
Array saya mencoba untuk menormalkan adalahinteger
array yang. Tampaknya mereka menggunakan tipe casting di versi>1.10
, dan Anda harus menggunakannyanumpy.true_divide()
untuk menyelesaikannya.img
adalah sebuahPIL.Image
objek.sumber