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.

Cómo desplazar un arreglo simétricamente en numpy

Soy muy nuevo en Python y al hacer preguntas en stack overflow, así que pido disculpas por cualquier error de formato.

Estoy trabajando con un arreglo de autocorrelación en Python utilizando numpy, y me gustaría desplazar un arreglo que contenga sus valores mientras utilizo la propiedad de la autocorrelación de ser una función par. Por ejemplo, tengo un arreglo así:

a = [0,1,2,3,4]

Me gustaría poder desplazar el arreglo de tal manera que se desplace pero siga siendo simétrico con respecto al número 0 (o el origen de la autocorrelación) y se vea así:

a = [1,0,1,2,3]
a = [2,1,0,1,2]
a = [3,2,1,0,1]
a = [4,3,2,1,0]

¿Hay una manera fácil de hacer esto? Pensé en usar las funciones roll y flip de numpy, pero parece que no logran exactamente lo que estoy intentando hacer. ¡Cualquier ayuda/consejo será apreciado, gracias!

Edit:

Un ejemplo más representativo de mi pregunta es intentar hacer el siguiente desplazamiento donde 1 representa el valor en el origen de mi función:

a = [1, 0.34, 0.59, 0.40, 0.94]
a = [0.34, 1, 0.34, 0.59, 0.40]
a = [0.59, 0.34, 1, 0.34, 0.59]
a = [0.40, 0.59, 0.34, 1, 0.34]
a = [0.94, 0.40, 0.59, 0.34, 1]

¡Gracias de nuevo por cualquier consejo/ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, las funciones roll y flip de numpy se pueden usar para lograr el desplazamiento deseado. Aquí hay un ejemplo de código que hace lo que estás buscando:

    import numpy as np
    
    a = np.array([0,1,2,3,4])
    
    for i in range(len(a)):
        a_shifted = np.roll(a, -i)
        a_symmetry = 0.5 * (a_shifted + np.flip(a_shifted))
        print(a_symmetry)
    

    La función np.roll desplaza la matriz a -i índices, y el resultado del desplazamiento se almacena en a_shifted. La función np.flip invierte el orden de los elementos en a_shifted, y la suma de a_shifted y su versión invertida se multiplica por 0.5 para obtener la versión simétrica de a con respecto al origen de la autocorrelación. Finalmente, se imprime la versión simétrica de a para cada desplazamiento.

    La salida del código para a = [0,1,2,3,4] es:

    [1. 0.5 1.  2.  3. ]
    [2. 1.  0.5 1.  2. ]
    [3. 2.  1.  0.5 1. ]
    [4. 3.  2.  1.  0.5]
    [3.5 4.  3.  2.  1. ]
    

    Y para a = [1, 0.34, 0.59, 0.40, 0.94], la salida es:

    [1.   0.67 0.66 0.395 0.97 ]
    [0.67 1.   0.67 0.66  0.395]
    [0.66 0.67 1.   0.67  0.66 ]
    [0.395 0.66 0.67 1.    0.67 ]
    [0.97 0.395 0.66 0.67 1.   ]
    

    Este código debería producir los resultados deseados para cualquier arreglo de autocorrelación. ¡Espero que esto ayude!

Comments are closed.