"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como as funções vetorizadas de Numpy podem justificar com eficiência as matrizes?

Como as funções vetorizadas de Numpy podem justificar com eficiência as matrizes?

Postado em 2025-03-25
Navegar:789

How Can NumPy's Vectorized Functions Efficiently Justify Arrays?

justificando as matrizes numpy com funções vetorizadas

Numpy fornece maneiras eficientes de justificar as matrizes usando funções vetorizadas, oferecendo o desempenho aprimorado e a simplicidade de código em comparação com os loops tradicionais e [&] []

= uma [máscara] outro: out.t [justificado_mask.t] = a.t [Mask.t] Retornar

Esta função justifica uma matriz 2D ao longo do eixo e lateral especificados (esquerda, direita, para cima, para baixo). Ele funciona identificando elementos diferentes de zero usando máscara, classificando-os usando a classificação, deslizando a máscara se justificando para cima ou para a esquerda e, finalmente, substituindo a matriz original com os valores justificados. [3,0,4,0], [5,0,6,0], [0,7,0,8]]) # Capa à esquerda coberto_left = justify (a, eixo = 1, lado = 'esquerda') Print ("Array original:") Imprimir (a) print ("\ \ NCovered à esquerda:") print (coberto_left)

output:

Array original: [[1 0 2 0] [3 0 4 0] [5 0 6 0] [0 7 0 8]] Coberta à esquerda: [[1 2 0 0] [3 4 0 0] [5 6 0 0] [7 8 0 0]]

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

para justificar uma matriz n-dimensional, a seguinte função pode ser usada:

def justify_nd (a, inválido_val, axis, side): pushax = lambda a: np.moveaxis (a, eixo, -1) Se inválido_val for np.nan: máscara = ~ np.isnan (a) outro: máscara = a! = inválido_val justificado_mask = np.sort (máscara, eixo = eixo) Se lado == 'frente': justificado_mask = np.flip (justificado_mask, eixo = eixo) out = np.full (a.shape, inválido_val) if (eixo ==-1) ou (eixo == a.ndim-1): out [justificado_mask] = uma [máscara] outro: pushax (fora) [pushax (justificado_mask)] = pushax (a) [pushax (máscara)] Retornar

Esta função suporta cenários mais complexos, justificando uma matriz n-dimensional ao longo de um eixo arbitrário e para a 'frente' ou 'fim' da matriz.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3