convolve_fft

astropy.convolution.convolve_fft(array, kernel, boundary='fill', fill_value=0.0, nan_treatment='interpolate', normalize_kernel=True, normalization_zero_tol=1e-08, preserve_nan=False, mask=None, crop=True, return_fft=False, fft_pad=None, psf_pad=None, min_wt=0.0, allow_huge=False, fftn=<function fftn>, ifftn=<function ifftn>, complex_dtype=<class 'complex'>)[ソース]

Ndarrayとn-カーネルを畳み込みする.以下を含む畳み込み画像を返す shape = array.shape それがそうです。カーネルが真ん中にあると仮定する.

convolve_fft 非常に似ています convolve それが代わりになったからです NaN 補間関数としてカーネルを用いた補間を有する元の画像中の値。しかし、それはまた、実装に固有の多くの追加オプションを含む。

convolve_fft とは異なり scipy.signal.fftconvolve いくつかの点で

  • 治療することができます NaN 値はゼロであるか、またはその上に補間される。

  • inf values are treated as NaN

  • これは、FFT速度を向上させるために、最も近いより速いサイズに充填することを選択することができる。これらのサイズはNumpyとScipyの実現に最適化されています fftconvolve デフォルトでもそれらが使用され、他の外部関数を使用する場合(以下参照)、結果が異なる可能性があります。

  • これは唯一効果的です。 mode ‘Same’(すなわち,同じ形状配列を返す)である.

  • 自分のFFTを使うことができます例えば pyFFTW あるいは…。 pyFFTW3 これは性能を向上させる可能性があります。具体的にはあなたのシステム構成に依存します。PyFFTW 3はスレッド化されているため,多核計算機上で顕著な性能優位が生じる可能性があるが,コストはより多くのメモリを必要とする.指定 fftn そして ifftn デフォルト値をカバーするためのキーワード、すなわち numpy.fft.fftn そして numpy.fft.ifftn それがそうです。♪the scipy.fft 関数はまた、より良い性能およびマルチスレッドオプションを提供します。

パラメータ
配列.numpy.ndarraynumpy.ndarray

これに畳む配列 kernel それがそうです。1、2、および3 Dアレイのみがテストされたにもかかわらず、任意の次元であってもよい。

numpy.ndarray あるいは…。 astropy.convolution.KernelNumpy.ndarrayやAsterpy.Curolution.Kernel

核を畳む。次元数は配列の次元数に適合すべきである.これらの次元は やめて! すべての方向に奇数でなければなりませんこれは非FFTとは違います convolve 機能します。以下の条件を満たせば,カーネルは標準化される. normalize_kernel もう設置しました。真ん中にあると仮定します(すなわち、カーネルが非対称である場合、シフトを引き起こす可能性があります)

boundary{‘Fill’,‘WRAP’},オプション

境界をどのように処理するかを示すフラグ:

  • ‘Fill’:配列境界外の値をFILL_VALUE(デフォルト値)に設定する

  • ‘WRAP’:周期的境界

♪the None FFTによる畳み込みは‘EXTEND’パラメータをサポートしていない

fill_value浮動、オプション

BORDINE=‘FILL’を用いた場合に配列外部で使用する値

nan_treatment{‘内挿’,‘充填’}

interpolate これにより、画像およびカーネル内のNaN(画像中でNaNの画素)を無視した各位置におけるカーネルが再正規化される。 fill NaN画素を固定値で置き換える(デフォルトゼロですので、参照されたい) fill_value )畳み込みの前に。カーネルの総和がゼロに等しい場合、NaN補間は不可能であり、異常を引き起こすことに留意されたい。

normalize_kernel呼び出し可能またはブーリアンタイプであれば、オプションで

指定すると,カーネルをそれを割って仕様化する関数である.例えば normalize_kernel=np.sum カーネルは、以下のように修正されることを意味します。 kernel = kernel / np.sum(kernel) それがそうです。Trueであれば,デフォルトでは normalize_kernel = np.sum それがそうです。

normalization_zero_tol浮動、オプション

カーネルはゼロの絶対許容差とは異なるかどうか.カーネルの総和がゼロであれば,この精度の範囲では仕様化できない.デフォルト値は“1 e-8”です。

preserve_nanブルル.

畳み込みを行った後、もともとNaNだった画素は再びNaNになるべきですか?

maskなしまたはndarray

A "mask" array. Shape must match array, and anything that is masked (i.e., not 0/False) will be set to NaN for the convolution. If None, no masking will be performed unless array is a masked array. If mask is not None and array is a masked array, a pixel is masked of it is masked in either mask or array.mask.

cropブル値、オプション

デフォルトで有効です。入力画像とカーネル内の大きい方の画像を返す.画像とカーネルが反対方向に非対称であれば,2方向に最大の画像を返す.例えば、入力画像が形状を有する場合 [100、3] 形のあるナッツです [6,6] 出力は [100,6] それがそうです。

return_fftブル値、オプション

戻ります。 fft(image)*fft(kernel) 畳み込みではなく ifft(fft(image)*fft(kernel)) )である。PSDを作るのに有用です。

fft_padブル値、オプション

デフォルトで有効です。ゼロパディング画像は、最も近いサイズまで、FFTをより効率的に実行することをサポートし、一般に、値は、最初の3~5個の素数に因数分解されることができる。使用 boundary='wrap' これは無効になります

psf_padブル値、オプション

ゼロ充填画像は、平滑化されたときのエッジサラウンドを回避するために、少なくとも画像サイズの合計である。デフォルトの場合、これは以下のように有効になります boundary='fill' しかしブールオプションでカバーすることができます boundary='wrap' そして psf_pad=True 互換性がありません。

min_wt浮動、オプション

もし無視したら NaN /ゼロでは、この値よりも重みが小さいすべての格子点を強制的に NaN (格子点の重みは no 隣人を無視して1.0).もし…。 min_wt ゼロであれば、すべてのゼロ重みの重点はゼロに設定され、そうではない。 NaN (そうでなければ,1/0=NaNであるから).以下の例を参照されたい。

allow_hugeブル値、オプション

FFTで大型アレイを使用することは許可されていますか?Falseであれば,アレイやカーネルサイズが1 GB以上の場合に異常を引き起こす.

fftn呼び出してもいいです。オプションです。

FFT関数です。あなた自身のfft、例えばfftw 3ラッパやScipyのfftnを使用するように書き換えることができます。 fft=scipy.fftpack.fftn それがそうです。

ifftn呼び出してもいいです。オプションです。

逆FFT関数。同じ方法で書き換えることができます fttn それがそうです。

complex_dtype複雑なタイプ、オプション

使用する複雑なデータタイプです。 numpy 64から256までの一連のオプションがあります。

返品
defaultNdarray

array …と絡む kernel それがそうです。もし…。 return_fft 設定されていれば戻ります fft(array) * fft(kernel) それがそうです。クロッピングが設定されていない場合は画像に戻るが、入力サイズではなくFFTパディングサイズを使用する。

賃上げをする
ValueError:

パディング後の配列が1 GBより大きい場合、この異常が引き起こされます。 allow_huge 本当ですか。

参考

convolve

Convolveはこのコードの非FFTバージョンである.これはメモリ効率が高く,小さいカーネルに対してはより高速にすることができる.

注意事項

使用 psf_pad=True 大きなPSFとは,生成されるデータが大きくなり,大量のメモリを消費する可能性がある.詳細については、公開されているhttps://githubb.com/avospy/avospy/ull/4366およびhttps://githubb.com/avospy/avospy/ull/11533での更新を参照されたい。

実例.

>>> convolve_fft([1, 0, 3], [1, 1, 1])
array([0.33333333, 1.33333333, 1.        ])
>>> convolve_fft([1, np.nan, 3], [1, 1, 1])
array([0.5, 2. , 1.5])
>>> convolve_fft([1, 0, 3], [0, 1, 0])
array([ 1.00000000e+00, -3.70074342e-17,  3.00000000e+00])
>>> convolve_fft([1, 2, 3], [1])
array([1., 2., 3.])
>>> convolve_fft([1, np.nan, 3], [0, 1, 0], nan_treatment='interpolate')
array([1., 0., 3.])
>>> convolve_fft([1, np.nan, 3], [0, 1, 0], nan_treatment='interpolate',
...              min_wt=1e-8)
array([ 1., nan,  3.])
>>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate')
array([0.5, 2. , 1.5])
>>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate',
...               normalize_kernel=True)
array([0.5, 2. , 1.5])
>>> import scipy.fft  # optional - requires scipy
>>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate',
...               normalize_kernel=True,
...               fftn=scipy.fft.fftn, ifftn=scipy.fft.ifftn)
array([0.5, 2. , 1.5])
>>> fft_mp = lambda a: scipy.fft.fftn(a, workers=-1)  # use all available cores
>>> ifft_mp = lambda a: scipy.fft.ifftn(a, workers=-1)
>>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate',
...               normalize_kernel=True, fftn=fft_mp, ifftn=ifft_mp)
array([0.5, 2. , 1.5])