numpy.lib.stride_tricks.as_strided
の結果は、NumPy配列のdtypeに依存しますか?numpy.as_stridedの結果は入力dtypeに依存しますか?
この質問はアレイを横断する際、各次元におけるステップバイトの
タプル
.strides
の定義から生じます。
ここで他の質問で使用した以下の機能を使用してください。 1dまたは2dの配列をとり、長さがwindow
の重複ウィンドウを作成します。結果は入力より1次元大きくなります。そのため、ストライドの定義とDTYPE float32
とfloat64
のために、例えば、そうでない場合と同等の配列の
def rwindows(a, window):
if a.ndim == 1:
a = a.reshape(-1, 1)
shape = a.shape[0] - window + 1, window, a.shape[-1]
strides = (a.strides[0],) + a.strides
windows = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
return np.squeeze(windows)
# examples
# rwindows(np.arange(5), window=2)
# rwindows(np.arange(20).reshape((5,4)), window=2)
は異なる進歩、これは今まで以上に私rwindows
機能を爆破されますがありますか?
私はテストしようとしましたが、それは非徹底的な方法であり、(1)関数docからの免責事項/警告が私がここで尋ねていることと何か関係がある(2)異なるdtypeを持つ等価ではない配列がなぜ上記のように異なる結果をもたらすのかを説明する。
私は2つの問題を見てきました。シェイプが正しくない場合は、バッファの最後から「ストライド」することができます。すべてのインデックス値が有効であることを保証するための保護手段はありません。次に、ストライドされた配列の多くの操作がコピーを作成します。そのコピーは、元の配列またはストライドビューよりもはるかに大きくなる可能性があります。多次元ストライド(2または3dウィンドウ)では特にそうです。 – hpaulj
ハァッ。その関数が実際にそれを現在文書化しているほど普及しているように見えます。 – user2357112