2D 배열의 모든 부분 행렬을 가져와 각 부분 행렬에 대한 조작을 수행해야합니다. 그래서 예를 들어 행렬을 만들어 :numpy없이 2D 배열의 모든 서브 행렬을 얻는 방법은 무엇입니까?
나는 모든 서브 매트릭스를 얻을 때까지 3 행 3 열을 캡처 한 다음이 "창"을 이동해야하는M3 = [list(range(5)) for i in range(6)]
[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]
. 첫 번째 행렬은 다음과 같습니다
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]
마지막 하나는이 행렬
[[2, 3, 4],
[2, 3, 4],
[2, 3, 4]]
나는 12 개 서브 매트릭스가 필요합니다. 그러나, 나는이 문제를 해결하기 위해 시도되는 코드를 사용하여 더 많은이 될 : 나는 18 얻을
for j in range(len(M3[0])-3):
for i in range(len(M3)-3):
for row in M3[0+j:3+j]:
X_i_j = [row[0+i:3+i] for row in M3[0+j:3+j]]
print(X_i_j)
을하지만,하지 (12) (각 행렬의 두 중복 포함) :
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
...
[[2, 3, 4], [2, 3, 4], [2, 3, 4]]
[[2, 3, 4], [2, 3, 4], [2, 3, 4]]
그리고이 샘플 내가 중복을 얻을 이유
for i in range(len(M3)-3):
for j in range(len(M3[0])-3):
X_i_j = [row[0+i:3+i] for row in M3[0+j:3+j]]
print(X_i_j)
내가 무엇이 잘못되었는지를보고하지 않습니다 코드 나는 각각 1 개 중복 6 개 서브 매트릭스를 얻을. 이 경우 numpy없이 2D 배열의 모든 서브 행렬을 어떻게 얻을 수 있습니까?