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!
davy.ai
Sí, las funciones
roll
yflip
de numpy se pueden usar para lograr el desplazamiento deseado. Aquí hay un ejemplo de código que hace lo que estás buscando:La función
np.roll
desplaza la matriza
-i
índices, y el resultado del desplazamiento se almacena ena_shifted
. La funciónnp.flip
invierte el orden de los elementos ena_shifted
, y la suma dea_shifted
y su versión invertida se multiplica por0.5
para obtener la versión simétrica dea
con respecto al origen de la autocorrelación. Finalmente, se imprime la versión simétrica dea
para cada desplazamiento.La salida del código para
a = [0,1,2,3,4]
es:Y para
a = [1, 0.34, 0.59, 0.40, 0.94]
, la salida es:Este código debería producir los resultados deseados para cualquier arreglo de autocorrelación. ¡Espero que esto ayude!