python - array - numpy vectorize




¿Cómo normalizar una matriz NumPy dentro de un cierto rango? (4)

Intenté seguir this y obtuve el error

TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''

La matriz numpy que intentaba normalizar era una matriz integer . Parece que desaprobaron la conversión de tipos en las versiones> 1.10 , y tienes que usar numpy.true_divide() para resolver eso.

arr = np.array(img)
arr = np.true_divide(arr,[255.0],out=None)

img era un objeto PIL.Image .

Después de realizar un procesamiento en una matriz de audio o de imagen, debe normalizarse dentro de un rango antes de poder volver a escribirse en un archivo. Esto se puede hacer así:

# 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)

¿Hay una manera menos detallada y conveniente de hacer esto? matplotlib.colors.Normalize() no parece estar relacionado.


Puede usar la versión "i" (como en idiv, imul ..) y no se ve tan mal:

image /= (image.max()/255.0)

Para el otro caso, puede escribir una función para normalizar una matriz n-dimensional por columnas:

def normalize_columns(arr):
    rows, cols = arr.shape
    for col in xrange(cols):
        arr[:,col] /= abs(arr[:,col]).max()

También puede sklearn escala usando sklearn . Las ventajas son que puede ajustar la normalización de la desviación estándar, además de centrar los datos, y que puede hacerlo en cualquier eje, por características o por registros.

from sklearn.preprocessing import scale
X = scale( X, axis=0, with_mean=True, with_std=True, copy=True )

Los axis palabras clave axis , with_mean , with_std se explican por sí mismos y se muestran en su estado predeterminado. La copy argumento realiza la operación in situ si está establecida en False . Documentación here .


Una solución simple es usar los escaladores ofrecidos por la biblioteca sklearn.preprocessing.

scaler = sk.MinMaxScaler(feature_range=(0, 250))
scaler = scaler.fit(X)
X_scaled = scaler.transform(X)
# Checking reconstruction
X_rec = scaler.inverse_transform(X_scaled)

El error X_rec-X será cero. Puede ajustar el rango de características para sus necesidades, o incluso usar un escalador estándar sk.StandardScaler ()





convenience-methods