オーディオまたは画像の配列に対して何らかの処理を行った後、ファイルに書き戻す前に、一定の範囲内で正規化する必要があります。これは次のように実行できます。
# 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)
より簡潔で便利な関数を使ってこれを行う方法はありますか?matplotlib.colors.Normalize()
関係ないようです。
ベストアンサー1
# Normalize audio channels to between -1.0 and +1.0
audio /= np.max(np.abs(audio),axis=0)
# Normalize image to between 0 and 255
image *= (255.0/image.max())
とを使用すると/=
、*=
中間の一時配列を省くことができ、メモリを節約できます。乗算は除算よりもコストがかからないため、
image *= 255.0/image.max() # Uses 1 division and image.size multiplications
よりわずかに速い
image /= image.max()/255.0 # Uses 1+image.size divisions
ここでは基本的な numpy メソッドを使用しているため、これは numpy で可能な限り効率的なソリューションであると思います。
インプレース操作では、コンテナ配列の dtype は変更されません。必要な正規化された値は浮動小数点数なので、インプレース操作を実行する前に、配列audio
とimage
配列に浮動小数点 dtype が必要です。まだ浮動小数点 dtype でない場合は、 を使用して変換する必要がありますastype
。たとえば、
image = image.astype('float64')