numpy 配列を新しいグリッドに再グリッド化しようとしています。この特定のケースでは、プロット目的でデータが対数的に等間隔になるように、パワー スペクトルを対数グリッドに再グリッド化しようとしています。
を使用して直線補間でこれを行うnp.interp
と、元のデータの一部が完全に無視されます。を使用digitize
すると、必要な結果が得られますが、機能させるにはいくつかの醜いループを使用する必要があります。
xfreq = np.fft.fftfreq(100)[1:50] # only positive, nonzero freqs
psw = np.arange(xfreq.size) # dummy array for MWE
# new logarithmic grid
logfreq = np.logspace(np.log10(np.min(xfreq)), np.log10(np.max(xfreq)), 100)
inds = np.digitize(xfreq,logfreq)
# interpolation: ignores data *but* populates all points
logpsw = np.interp(logfreq, xfreq, psw)
# so average down where available...
logpsw[np.unique(inds)] = [psw[inds==i].mean() for i in np.unique(inds)]
# the new plot
loglog(logfreq, logpsw, linewidth=0.5, color='k')
numpyでこれを達成するためのより良い方法はありますか? インライン ループ ステップを置き換えるだけで十分です。