1
3D 배열의 여러 하위 배열을 가져오고 싶습니다. I 스택의 포스트에서 발견 된 기능이 2 차원 경우의 어레이를 분할 할 수Python - 3D 배열의 "하위 배열"가져 오기
def blockshaped(arr, nrows, ncols):
h, w = arr.shape
return (arr.reshape(h//nrows, nrows, -1, ncols)
.swapaxes(1,2)
.reshape(-1, nrows, ncols))
하고 그래서 차원 배열의 경우에 확장하고자, 2D 같은 형태 블록 arrray하지만 제 차원의 각 슬라이스에 . 나는 예를 들어
...는 "루프"하지만 나던 작업으로 시도 :
import numpy as np
#2D case (which works)
test=np.array([[ 2., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 3., 1., 1., 1.],
[ 1., 1., 1., 1.]])
def blockshaped(arr, nrows, ncols):
h, w = arr.shape
return (arr.reshape(h//nrows, nrows, -1, ncols)
.swapaxes(1,2)
.reshape(-1, nrows, ncols))
sub = blockshaped(test, 2,2)
그리고 4 "서브 어레이"얻을 :
array([[[ 2., 1.],
[ 1., 1.]],
[[ 1., 1.],
[ 1., 1.]],
[[ 3., 1.],
[ 1., 1.]],
[[ 1., 1.],
[ 1., 1.]]])
을하지만 3D 배열 등을위한 입력 : 그래서 여기
test2=np.array([[[ 2., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 3., 1., 1., 1.],
[ 1., 1., 1., 1.]],
[[ 5., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 2., 1., 1., 1.],
[ 1., 1., 1., 1.]]])
나는 ... 같은 분해를 좋아하지만 2 "조각"에있는 것
def blockshaped(arr, nrows, ncols):
h, w, t = arr.shape
return (arr.reshape(h//nrows, nrows, -1, ncols)
.swapaxes(1,2)
.reshape(-1, nrows, ncols))
나는 "루프"하지만 나던 작업으로 시도 : 같은 일을 일하는 것이
for i in range(test2.shape[0]):
sub = blockshaped(test[i,:,:], 2, 2)
나는 mod ified 함수는 형태가 좋지만 모양은 거의 이상하지 않다 : (2, 4, 2, 2). 나는 기대했다 (2,2,2) 안돼? 도움을 주셔서 감사합니다;) – user3601754
@ user3601754 정확히'np.array ([test2에서 a에 대해 (블록 형 (a, 2, 2)]')로 반환해야합니다.'), 그렇지 않습니까? –
같은 치수! 내 코드에서 사용하려고합니다! 고마워;) – user3601754