es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Numba Compatible Numpy Meshgrid can be translated into Spanish as “Numpy Meshgrid compatible con Numba”.

Tengo una función que genera arreglos aplanados a partir de una malla 3D como se muestra a continuación.

Estoy tratando de implementar Numba en todo mi código, pero cuando Numba encuentra esta función, arroja un error (ya que Numba no admite las funciones meshgrid o mgrid de Numpy). ¿Existe alguna forma alternativa de hacer que esto sea compatible con Numba?

def meshgrid_flat(max=1.0, sampling=100):
    #
    s = np.linspace(-max,max,sampling)
    X, Y, Z = np.meshgrid(s,s,s,indexing="ij")
    x, y, z = X.ravel(), Y.ravel(), Z.ravel()
    #
    return x, y, z
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es calcular manualmente los arrays aplanados sin usar la función meshgrid. Esto se puede hacer utilizando bucles anidados para iterar sobre cada dimensión y calcular los valores correspondientes para x, y y z. Aquí hay una implementación de ejemplo:

    @numba.njit
    def meshgrid_flat(max=1.0, sampling=100):
        #
        s = np.linspace(-max,max,sampling)
        n = len(s)
        x = np.empty(n**3)
        y = np.empty(n**3)
        z = np.empty(n**3)
        #
        idx = 0
        for i in range(n):
            for j in range(n):
                for k in range(n):
                    x[idx] = s[i]
                    y[idx] = s[j]
                    z[idx] = s[k]
                    idx += 1
        #
        return x, y, z
    

    En esta implementación, calculamos el número de puntos en cada dimensión (n), y luego utilizamos bucles anidados para iterar sobre cada punto y calcular los valores correspondientes de x, y y z. Utilizamos la función empty para crear arrays del tamaño adecuado, y luego los llenamos a medida que iteramos sobre los puntos. Finalmente, devolvemos los arrays aplanados como una tupla.

    Ten en cuenta que hemos añadido el decorador @numba.njit a la función para habilitar la compilación de Numba. Esto puede mejorar el rendimiento, pero también restringe el uso de ciertas características de Python y NumPy. Si encuentras algún problema de compatibilidad con Numba, puedes intentar eliminar este decorador y utilizar la implementación de Python estándar.

Comments are closed.