as_strided
からnumpy.lib.stride_tricks
までのサブシリーズを抽出するのに苦労していますが、 strides
引数の場合NumPyストライドを使用して3D配列に2D配列の最後の軸に沿ってウィンドウをスライドさせて
私は、長さ(a=
)10の5D配列を含むm
という行列を持っているとしましょう。 m
の各1D配列の長さ(b=
)4のサブ1D配列を抽出したいと思います。
import numpy
from numpy.lib.stride_tricks import as_strided
a, b = 10, 4
m = numpy.array([range(i,i+a) for i in range(5)])
# first try
sub_m = as_strided(m, shape=(m.shape[0], m.shape[1]-b+1, b))
print sub_m.shape # (5,7,4) which is what i expected
print sub_m[-1,-1,-1] # Some unexpected strange number: 8227625857902995061
# second try with strides argument
sub_m = as_strided(m, shape=(m.shape[0], m.shape[1]-b+1, b), strides=(m.itemize,m.itemize,m.itemize))
# gives error, see below
AttributeError: 'numpy.ndarray' object has no attribute 'itemize'
あなたは私が私の最初の試みでsub_m
のための右の形状を得るために成功する見ることができるように。しかし、私は情報についてstrides=()
に書くために何を見つけることができません。
m = [[ 0 1 2 3 4 5 6 7 8 9]
[ 1 2 3 4 5 6 7 8 9 10]
[ 2 3 4 5 6 7 8 9 10 11]
[ 3 4 5 6 7 8 9 10 11 12]
[ 4 5 6 7 8 9 10 11 12 13]]
予想される出力:
sub_n = [
[[0 1 2 3] [1 2 3 4] ... [5 6 7 8] [6 7 8 9]]
[[1 2 3 4] [2 3 4 5] ... [6 7 8 9] [7 8 9 10]]
[[2 3 4 5] [3 4 5 6] ... [7 8 9 10] [8 9 10 11]]
[[3 4 5 6] [4 5 6 7] ... [8 9 10 11] [9 10 11 12]]
[[4 5 6 7] [5 6 7 8] ... [9 10 11 12] [10 11 12 13]]
]
編集:、それはなぜな理由私はより多くのデータを持っています使用したいas_strided
(効率)
期待される出力の形状は何ですか?入力にshape(m、n)があり、ストライド長が 'L'となっているとします。 – Divakar
予想される出力形状:(5,7,4)(m、n、L)、L = m-4 + 1 – Nuageux
多分あなたは(m、n-L + 1、L)を意味しますか? – Divakar