def c2rn(forward, x, shape=None, axes=None, norm=None, overwrite_x=False): """Multi-dimensional inverse discrete fourier transform with real output""" tmp = _asfarray(x) # TODO: Optimize for hermitian and real? if np.isrealobj(tmp): tmp = tmp + 0.j noshape = shape is None shape, axes = _init_nd_shape_and_axes(tmp, shape, axes) if len(axes) == 0: raise ValueError("at least 1 axis must be transformed") if noshape: shape[-1] = (x.shape[axes[-1]] - 1) * 2 norm = _normalization(norm, forward) # Last axis utilises hermitian symmetry lastsize = shape[-1] shape[-1] = (shape[-1] // 2) + 1 tmp, _ = _fix_shape(tmp, shape, axes) # Note: overwrite_x is not utilised return pfft.c2r(tmp, axes, lastsize, forward, norm, None, _default_workers)
def c2r(forward, x, n=None, axis=-1, norm=None, overwrite_x=False): """ Return inverse discrete Fourier transform of real sequence x. """ tmp = _asfarray(x) norm = _normalization(norm, forward) # TODO: Optimize for hermitian and real? if np.isrealobj(tmp): tmp = tmp + 0.j # Last axis utilises hermitian symmetry if n is None: n = (tmp.shape[axis] - 1) * 2 if n < 1: raise ValueError( "Invalid number of data points ({0}) specified".format(n)) else: tmp, _ = _fix_shape_1d(tmp, (n // 2) + 1, axis) # Note: overwrite_x is not utilised return pfft.c2r(tmp, (axis, ), n, forward, norm, None, _default_workers)