仅使用 NumPy 方法从数独板上获取所有子网格

问题描述 投票:0回答:1

我必须仅使用 NumPy 编写 SudokuBoard 类。作为此类的一部分,我想定义 get_block_idx_with_highest_sum() 函数,它将返回具有最高包含数字总和的子网格 (3x3) 的索引。

例如:

董事会:

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

在本例中,子网格的总和:

(0,0) = 18; (0,1) = 45; (0,2) = 62

(1,0) = 45; (1,1) = 62; (1,2) = 19

(2,0) = 62; (2,1) = 19; (2,2) = 36

因此 (0,2)、(1,1) 或 (2,0) 子网格的总和最大。

我想从板上获取子网格,但是当我使用 numpy 数组来索引 2d numpy 数组(板)时,我收到此错误:

只有整数标量数组可以转换为标量索引

如何仅使用 numpy 方法获取所有子网格?

(错误的)函数:

def get_block_idx_with_highest_sum(self):
        indices = np.arange(9)
        sub_board_sum_values = self.table[indices//3:indices//3+3, indices%3:indices%3]
        return sub_board_sum_values

(该函数返回 sub_board_sum_values,但仅用于测试)

python numpy multidimensional-array indexing sudoku
1个回答
0
投票
r0 = np.outer([1,1,1],[0,0,0,1,1,1,2,2,2])
bins = np.append(np.append(r0,3+r0, axis=0),6+r0, axis=0).flatten()
sums = np.reshape(np.bincount(bins, weights=board.flatten()),[3,3])
© www.soinside.com 2019 - 2024. All rights reserved.