本文整理匯總了Python中scipy.fftpack.ifftshift方法的典型用法代碼示例。如果您正苦於以下問題:Python fftpack.ifftshift方法的具體用法?Python fftpack.ifftshift怎麽用?Python fftpack.ifftshift使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類scipy.fftpack
的用法示例。
在下文中一共展示了fftpack.ifftshift方法的12個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: get_numpy
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def get_numpy(shape, fftn_shape=None, **kwargs):
import numpy.fft as numpy_fft
f = {
"fft2": numpy_fft.fft2,
"ifft2": numpy_fft.ifft2,
"rfft2": numpy_fft.rfft2,
"irfft2": lambda X: numpy_fft.irfft2(X, s=shape),
"fftshift": numpy_fft.fftshift,
"ifftshift": numpy_fft.ifftshift,
"fftfreq": numpy_fft.fftfreq,
}
if fftn_shape is not None:
f["fftn"] = numpy_fft.fftn
fft = SimpleNamespace(**f)
return fft
示例2: get_scipy
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def get_scipy(shape, fftn_shape=None, **kwargs):
import numpy.fft as numpy_fft
import scipy.fftpack as scipy_fft
# use numpy implementation of rfft2/irfft2 because they have not been
# implemented in scipy.fftpack
f = {
"fft2": scipy_fft.fft2,
"ifft2": scipy_fft.ifft2,
"rfft2": numpy_fft.rfft2,
"irfft2": lambda X: numpy_fft.irfft2(X, s=shape),
"fftshift": scipy_fft.fftshift,
"ifftshift": scipy_fft.ifftshift,
"fftfreq": scipy_fft.fftfreq,
}
if fftn_shape is not None:
f["fftn"] = scipy_fft.fftn
fft = SimpleNamespace(**f)
return fft
示例3: convolve
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def convolve(f, g):
"""
FFT based convolution
:param f: array
:param g: array
:return: array, (f * g)[n]
"""
f_fft = fftpack.fftshift(fftpack.fftn(f))
g_fft = fftpack.fftshift(fftpack.fftn(g))
return fftpack.fftshift(fftpack.ifftn(fftpack.ifftshift(f_fft*g_fft)))
示例4: deconvolve
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def deconvolve(f, g):
"""
FFT based deconvolution
:param f: array
:param g: array
:return: array,
"""
f_fft = fftpack.fftshift(fftpack.fftn(f))
g_fft = fftpack.fftshift(fftpack.fftn(g))
return fftpack.fftshift(fftpack.ifftn(fftpack.ifftshift(f_fft/g_fft)))
示例5: test_definition
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def test_definition(self):
x = [0,1,2,3,4,-4,-3,-2,-1]
y = [-4,-3,-2,-1,0,1,2,3,4]
assert_array_almost_equal(fftshift(x),y)
assert_array_almost_equal(ifftshift(y),x)
x = [0,1,2,3,4,-5,-4,-3,-2,-1]
y = [-5,-4,-3,-2,-1,0,1,2,3,4]
assert_array_almost_equal(fftshift(x),y)
assert_array_almost_equal(ifftshift(y),x)
示例6: test_inverse
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def test_inverse(self):
for n in [1,4,9,100,211]:
x = random((n,))
assert_array_almost_equal(ifftshift(fftshift(x)),x)
示例7: test_inverse
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def test_inverse(self):
for n in [1,4,9,100,211]:
x = random.random((n,))
assert_array_almost_equal(ifftshift(fftshift(x)),x)
示例8: generate_fractal_surface
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def generate_fractal_surface(self, G):
"""Generate a 2D array with a fractal distribution.
Args:
G (class): Grid class instance - holds essential parameters describing the model.
"""
if self.xs == self.xf:
surfacedims = (self.ny, self.nz)
elif self.ys == self.yf:
surfacedims = (self.nx, self.nz)
elif self.zs == self.zf:
surfacedims = (self.nx, self.ny)
self.fractalsurface = np.zeros(surfacedims, dtype=complextype)
# Positional vector at centre of array, scaled by weighting
v1 = np.array([self.weighting[0] * (surfacedims[0]) / 2, self.weighting[1] * (surfacedims[1]) / 2])
# 2D array of random numbers to be convolved with the fractal function
R = np.random.RandomState(self.seed)
A = R.randn(surfacedims[0], surfacedims[1])
# 2D FFT
A = fftpack.fftn(A)
# Shift the zero frequency component to the centre of the array
A = fftpack.fftshift(A)
# Generate fractal
generate_fractal2D(surfacedims[0], surfacedims[1], G.nthreads, self.b, self.weighting, v1, A, self.fractalsurface)
# Shift the zero frequency component to start of the array
self.fractalsurface = fftpack.ifftshift(self.fractalsurface)
# Take the real part (numerical errors can give rise to an imaginary part) of the IFFT
self.fractalsurface = np.real(fftpack.ifftn(self.fractalsurface))
# Scale the fractal volume according to requested range
fractalmin = np.amin(self.fractalsurface)
fractalmax = np.amax(self.fractalsurface)
fractalrange = fractalmax - fractalmin
self.fractalsurface = self.fractalsurface * ((self.fractalrange[1] - self.fractalrange[0]) / fractalrange) \
+ self.fractalrange[0] - ((self.fractalrange[1] - self.fractalrange[0]) / fractalrange) * fractalmin
示例9: two_point_correlation_fft
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def two_point_correlation_fft(im):
r"""
Calculates the two-point correlation function using fourier transforms
Parameters
----------
im : ND-array
The image of the void space on which the 2-point correlation is desired
Returns
-------
result : named_tuple
A tuple containing the x and y data for plotting the two-point
correlation function, using the *args feature of matplotlib's plot
function. The x array is the distances between points and the y array
is corresponding probabilities that points of a given distance both
lie in the void space.
Notes
-----
The fourier transform approach utilizes the fact that the autocorrelation
function is the inverse FT of the power spectrum density.
For background read the Scipy fftpack docs and for a good explanation see:
http://www.ucl.ac.uk/~ucapikr/projects/KamilaSuankulova_BSc_Project.pdf
"""
# Calculate half lengths of the image
hls = (np.ceil(np.shape(im))/2).astype(int)
# Fourier Transform and shift image
F = sp_ft.ifftshift(sp_ft.fftn(sp_ft.fftshift(im)))
# Compute Power Spectrum
P = np.absolute(F**2)
# Auto-correlation is inverse of Power Spectrum
autoc = np.absolute(sp_ft.ifftshift(sp_ft.ifftn(sp_ft.fftshift(P))))
tpcf = _radial_profile(autoc, r_max=np.min(hls))
return tpcf
示例10: convolve
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def convolve(arr1, arr2, dx=None, axes=None):
"""
Performs a centred convolution of input arrays
Parameters
----------
arr1, arr2 : `numpy.ndarray`
Arrays to be convolved. If dimensions are not equal then 1s are appended
to the lower dimensional array. Otherwise, arrays must be broadcastable.
dx : float > 0, list of float, or `None` , optional
Grid spacing of input arrays. Output is scaled by
`dx**max(arr1.ndim, arr2.ndim)`. default=`None` applies no scaling
axes : tuple of ints or `None`, optional
Choice of axes to convolve. default=`None` convolves all axes
"""
if arr2.ndim > arr1.ndim:
arr1, arr2 = arr2, arr1
if axes is None:
axes = range(arr2.ndim)
arr2 = arr2.reshape(arr2.shape + (1,) * (arr1.ndim - arr2.ndim))
if dx is None:
dx = 1
elif isscalar(dx):
dx = dx ** (len(axes) if axes is not None else arr1.ndim)
else:
dx = prod(dx)
arr1 = fftn(arr1, axes=axes)
arr2 = fftn(ifftshift(arr2), axes=axes)
out = ifftn(arr1 * arr2, axes=axes) * dx
return require(out, requirements="CA")
示例11: _slp_filter
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def _slp_filter(phase, cutoff, rows, cols, x_size, y_size, params):
"""
Function to perform spatial low pass filter
"""
cx = np.floor(cols/2)
cy = np.floor(rows/2)
# fft for the input image
imf = fftshift(fft2(phase))
# calculate distance
distfact = 1.0e3 # to convert into meters
[xx, yy] = np.meshgrid(range(cols), range(rows))
xx = (xx - cx) * x_size # these are in meters as x_size in meters
yy = (yy - cy) * y_size
dist = np.sqrt(xx ** 2 + yy ** 2)/distfact # km
if params[cf.SLPF_METHOD] == 1: # butterworth low pass filter
H = 1. / (1 + ((dist / cutoff) ** (2 * params[cf.SLPF_ORDER])))
else: # Gaussian low pass filter
H = np.exp(-(dist ** 2) / (2 * cutoff ** 2))
outf = imf * H
out = np.real(ifft2(ifftshift(outf)))
out[np.isnan(phase)] = np.nan
return out # out is units of phase, i.e. mm
# TODO: use tiles here and distribute amongst processes
示例12: generate_fractal_volume
# 需要導入模塊: from scipy import fftpack [as 別名]
# 或者: from scipy.fftpack import ifftshift [as 別名]
def generate_fractal_volume(self, G):
"""Generate a 3D volume with a fractal distribution.
Args:
G (class): Grid class instance - holds essential parameters describing the model.
"""
# Scale filter according to size of fractal volume
if self.nx == 1:
filterscaling = np.amin(np.array([self.ny, self.nz])) / np.array([self.ny, self.nz])
filterscaling = np.insert(filterscaling, 0, 1)
elif self.ny == 1:
filterscaling = np.amin(np.array([self.nx, self.nz])) / np.array([self.nx, self.nz])
filterscaling = np.insert(filterscaling, 1, 1)
elif self.nz == 1:
filterscaling = np.amin(np.array([self.nx, self.ny])) / np.array([self.nx, self.ny])
filterscaling = np.insert(filterscaling, 2, 1)
else:
filterscaling = np.amin(np.array([self.nx, self.ny, self.nz])) / np.array([self.nx, self.ny, self.nz])
# Adjust weighting to account for filter scaling
self.weighting = np.multiply(self.weighting, filterscaling)
self.fractalvolume = np.zeros((self.nx, self.ny, self.nz), dtype=complextype)
# Positional vector at centre of array, scaled by weighting
v1 = np.array([self.weighting[0] * self.nx / 2, self.weighting[1] * self.ny / 2, self.weighting[2] * self.nz / 2])
# 3D array of random numbers to be convolved with the fractal function
R = np.random.RandomState(self.seed)
A = R.randn(self.nx, self.ny, self.nz)
# 3D FFT
A = fftpack.fftn(A)
# Shift the zero frequency component to the centre of the array
A = fftpack.fftshift(A)
# Generate fractal
generate_fractal3D(self.nx, self.ny, self.nz, G.nthreads, self.b, self.weighting, v1, A, self.fractalvolume)
# Shift the zero frequency component to the start of the array
self.fractalvolume = fftpack.ifftshift(self.fractalvolume)
# Take the real part (numerical errors can give rise to an imaginary part) of the IFFT
self.fractalvolume = np.real(fftpack.ifftn(self.fractalvolume))
# Bin fractal values
bins = np.linspace(np.amin(self.fractalvolume), np.amax(self.fractalvolume), self.nbins)
for j in range(self.ny):
for k in range(self.nz):
self.fractalvolume[:, j, k] = np.digitize(self.fractalvolume[:, j, k], bins, right=True)