Как я могу восстановить ndarray, который я получил от использования numpy.lib.stride_tricks.as_strided другому ndarray - PullRequest
0 голосов
/ 24 ноября 2018
import numpy as np
sudoku = np.array([   
    [2, 8, 7, 1, 6, 5, 9, 4, 3],
    [9, 5, 4, 7, 3, 2, 1, 6, 8],
    [6, 1, 3, 8, 4, 9, 7, 5, 2],
    [8, 7, 9, 6, 5, 1, 2, 3, 4],
    [4, 2, 1, 3, 9, 8, 6, 7, 5],
    [3, 6, 5, 4, 2, 7, 8, 9, 1],
    [1, 9, 8, 5, 7, 3, 4, 2, 6],
    [5, 4, 2, 9, 1, 6, 3, 8, 7],
    [7, 3, 6, 2, 8, 4, 5, 1, 9]
])
shape = (3, 3, 3, 3)
strides = sudoku.itemsize * np.array([27, 3, 9, 1])
squares = np.lib.stride_tricks.as_strided(sudoku, shape=shape, strides=strides) 
print(squares)

'''
[[[[2 8 7]    [9 5 4]    [6 1 3]]
  [[1 6 5]    [7 3 2]    [8 4 9]]
  [[9 4 3]    [1 6 8]    [7 5 2]]]

 [[[8 7 9]    [4 2 1]    [3 6 5]]
  [[6 5 1]    [3 9 8]    [4 2 7]]
  [[2 3 4]    [6 7 5]    [8 9 1]]]

 [[[1 9 8]    [5 4 2]    [7 3 6]]
  [[5 7 3]    [9 1 6]    [2 8 4]]
  [[4 2 6]    [3 8 7]    [5 1 9]]]]
'''

квадраты - это четырехмерный массив, я хочу разобраться с ним с помощью некоторых операций, но как я могу восстановить квадраты в судоку?

1 Ответ

0 голосов
/ 25 ноября 2018

Простое решение:

from numpy import hstack
sudoku= hstack(hstack(squares))

Обратите внимание, что skimage.util.view_as_blocks выполняет прямую операцию:

rows=skimage.util.view_as_blocks(sudoku,(1,9))
cols=skimage.util.view_as_blocks(sudoku,(9,1))
blks=skimage.util.view_as_blocks(sudoku,(3,3))

sudoku= hstack(hstack()) инвертирует три представления.

...