Python numpy.fft cambia los pasos

¡Estimada comunidad de stackoverflow!

Hoy descubrí que en una arquitectura de clúster de alta gama, una multiplicación por elementos de 2 cubos con dimensiones de 1921 x 512 x 512 lleva ~ 27 s. Esto es demasiado tiempo ya que tengo que realizar tales cálculos al menos 256 veces para un promedio azimutal de un espectro de potencia en la implementación actual. Descubrí que el rendimiento lento se debió principalmente a diferentes estructuras de zancadas (C en un caso y FORTRAN en el otro). Una de las dos matrices era una cuadrícula booleana recién generada (orden C) y la otra (orden FORTRAN) provenía del 3Dnumpy.fft.fftn () Transformada de Fourier de una cuadrícula de entrada (orden C). ¿Alguna razón por la cual numpy.fft.fftn () cambia los pasos e ideas sobre cómo evitar eso, excepto para invertir los ejes (que sería solo una solución)? Con pasos similares (ndarray.copy () de la cuadrícula FT), ~ 4s son alcanzables, una mejora tremenda.

Por lo tanto, la pregunta es la siguiente:

Considere la matriz:

ran = np.random.rand(1921, 512, 512)
ran.strides
(2097152, 4096, 8)

a = np.fft.fftn(ran)
a.strides
(16, 30736, 15736832)

Como podemos ver, la estructura de la zancada es diferente. ¿Cómo se puede evitar esto (sin usar a = np.fft.fftn (ran, ejes = (1,0)))? ¿Hay alguna otra rutina de matriz numpy que pueda afectar la estructura de zancada? ¿Qué se puede hacer en esos casos?

Como siempre, los consejos útiles son muy apreciados.

Respuestas a la pregunta(2)

Su respuesta a la pregunta