我必须仅使用 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,但仅用于测试)
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])