Source code for monalisa.fourier._idf3

"""Port of src/fourier3/bmIDF3.m."""

import numpy as np
import scipy.fft

from monalisa._fft import fftshift, ifftshift
from monalisa._mat import msize, reshape
from monalisa.array._block_reshape import block_reshape


[docs] def idf3(x, N_u, dK_u): """Centered 3D inverse Fourier transform scaled by prod(N_u)*prod(dK_u).""" argSize = msize(x) x = block_reshape(x, N_u) for n in range(3): x = fftshift(scipy.fft.ifft(ifftshift(x, axes=n), axis=n, workers=-1, overwrite_x=True), axes=n) F = np.float32(np.prod(np.ravel(N_u)) * np.prod(np.ravel(dK_u))) x = x * F return reshape(x, argSize)