numpy proporciona formas eficientes para justificar las matrices usando funciones vectorizadas, ofreciendo un rendimiento mejorado y el código simplificado en comparación con la tarea tradicional de python. elementos distintos de cero a la izquierda, derecha, arriba o hacia abajo mientras mantienen su forma.
La siguiente implementación numpy realiza una justificación eficiente:
Esta función justifica una matriz 2D a lo largo del eje especificado y el lado (izquierda, derecha, hacia arriba, hacia abajo). Funciona identificando elementos distintos de cero usando máscara, clasificándolos usando el tipo, volteando la máscara si se justifica hacia arriba o hacia la izquierda, y finalmente sobrescribe la matriz original con los valores justificados.
import numpy as np def justify(a, invalid_val=0, axis=1, side='left'): if invalid_val is np.nan: mask = ~np.isnan(a) else: mask = a!=invalid_val justified_mask = np.sort(mask,axis=axis) if (side=='up') | (side=='left'): justified_mask = np.flip(justified_mask,axis=axis) out = np.full(a.shape, invalid_val) if axis==1: out[justified_mask] = a[mask] else: out.T[justified_mask.T] = a.T[mask.T] return out
aquí es un ejemplo de uso que cubre los elementos de cero a la izquierda:
a = np.array ([1,2,2,2,2,2,2,2,2,2,0]. [3,0,4,0], [5,0,6,0], [0,7,0,8]]) # Cubierta a la izquierda cubierto_left = justify (a, axis = 1, lado = 'izquierda') Imprimir ("Array original:") Imprimir (a) imprimir ("\ ncovered izquierda:") print (cubierta_left)Array original: [[1 0 2 0] [3 0 4 0] [5 0 6 0] [0 7 0 8]] Cubierto a la izquierda: [[1 2 0 0] [3 4 0 0] [5 6 0 0] [7 8 0 0]]
a = np.array([[1,0,2,0], [3,0,4,0], [5,0,6,0], [0,7,0,8]]) # Cover left covered_left = justify(a, axis=1, side='left') print("Original Array:") print(a) print("\nCovered Left:") print(covered_left)justificación para una matriz n-dimensional genérica
para justificar una matriz n-dimensional, se puede usar la siguiente función:
a = np.array([[1,0,2,0], [3,0,4,0], [5,0,6,0], [0,7,0,8]]) # Cover left covered_left = justify(a, axis=1, side='left') print("Original Array:") print(a) print("\nCovered Left:") print(covered_left)def justify_nd (a, invalid_val, axis, lado): pushax = lambda a: np.moveaxis (a, eje, -1) Si Invalid_Val es np.nan: máscara = ~ np.isnan (a) demás: máscara = a! = inválido_val justified_mask = np.sort (máscara, axis = eje) Si el lado == 'Frente': justified_mask = np.flip (justified_mask, axis = axis) out = np.full (a.shape, invalid_val) if (axis ==-1) o (eje == A.NDIM-1): out [justified_mask] = a [máscara] demás: pushax (out) [pushax (justified_mask)] = pushax (a) [pushax (máscara)] Return out
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3