numpy.lib.stride_tricks.as_stridedを使用して配列のオーバーラップしていないブロックを反復しようとしていますが、パラメータのドキュメントが見つかりません私は重複ブロックしか得ることができませんでした。Numpy stride_tricksを使用してオーバーラップしない配列ブロックを取得する
たとえば、4x5アレイを4x2x2ブロックから取得したいと考えています。右端と下端の余分なセルが除外されていても問題ありません。
これまでのところ、私のコードは次のとおりです。
import sys
import numpy as np
a = np.array([
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
])
sz = a.itemsize
h,w = a.shape
bh,bw = 2,2
shape = (h/bh, w/bw, bh, bw)
strides = (w*sz, sz, w*sz, sz)
blocks = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
print blocks[0][0]
assert blocks[0][0].tolist() == [[1, 2], [6,7]]
print blocks[0][1]
assert blocks[0][1].tolist() == [[3,4], [8,9]]
print blocks[1][0]
assert blocks[1][0].tolist() == [[11, 12], [16, 17]]
私の形状や進歩のパラメータが間違っていると思われるので、結果としてブロック配列の形状が正しいように思えるが、最後の2は失敗主張します。オーバーラップしないブロックを得るためにこれらの値をどのように設定する必要がありますか?
ありがとうございました。私たちのa.itemsizeが違うようです(私は8です)。私はあなたのコードを歩みを定義するために(あなたの説明に基づいて)式を使用するようにリファクタリングしたので、誰にとってもうまくいくでしょう。 – Cerin