Próbuję użyć numpy.lib.stride_tricks.as_strided do iterowania nad nienakładającymi się blokami tablicy, ale mam problem ze znalezieniem dokumentacji parametrów, więc Mogłem tylko nakładać się na bloki.Używanie Numpy stride_tricks do uzyskania nienakładających się bloków tablicowych
Na przykład mam tablicę 4x5, z której chciałbym otrzymać 4 bloki 2x2. Nie mam nic przeciwko dodatkowym komórkom po prawej i dolnej krawędzi.
tej pory mój kod to:
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]]
Kształt otrzymanej tablicy bloków wydaje się być poprawne, ale dwa ostatnie nie twierdzi, przypuszczalnie dlatego, że moje parametry kształtu lub postępy są nieprawidłowe. Jakie wartości należy ustawić, aby uzyskać nie nakładające się bloki?
Dzięki. Wygląda na to, że nasza a.itemsize różni się (moja to 8). Przetłumaczyłem Twój kod, aby użyć formuły (w oparciu o twoje wyjaśnienie), aby zdefiniować kroki, więc będzie działać dla wszystkich. – Cerin