我正在研究數獨求解器(針對 Leet 問題),并且我能夠使用基本索引(例如,
board[row,:]或board[:,col]. 這些中的每一個都從 2D 陣列中切出一個 1D 陣列。
在以下意義上,我想對數獨板的 3 x 3 子塊進行等效處理。我想限定Python函式iBlock即取為引數的塊行和塊列號,并且回傳的東西,使得board[something]地址中的子塊的該9個要素board[something]可以如下使用:
board[something] = [ 3, 7, 2, 1, 4, 5, 9, 8, 6 ]
將具有將整個 9 x 9 板從
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . - - - . . .
. . . - - - . . .
. . . - - - . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
到:
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . 3 7 2 . . .
. . . 1 4 5 . . .
. . . 9 8 6 . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
而且我也希望能夠board[something]在作業的右側使用。
所以問題是......有什么東西可以讓事情像上面那樣作業?
uj5u.com熱心網友回復:
希望這些資訊有所幫助。我會使用numpy 和 slicing。
這是一個小例子,希望能產生您想要的結果:
import numpy as np
mat = np.zeros((9,9))
start = 3
end = 6
mat[start:end,start:end] = np.array([ 3, 7, 2, 1, 4, 5, 9, 8, 6 ]).reshape((3,3))
print(mat)
[[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 3. 7. 2. 0. 0. 0.]
[0. 0. 0. 1. 4. 5. 0. 0. 0.]
[0. 0. 0. 9. 8. 6. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
uj5u.com熱心網友回復:
胡思亂想,我想我找到了解決方案:
def iBlock( R, C ):
return ( [3*R,3*R,3*R,3*R 1,3*R 1,3*R 1,3*R 2,3*R 2,3*R 2],
[3*C,3*C 1,3*C 2,3*C,3*C 1,3*C 2,3*C,3*C 1,3*C 2] )
iBlock(1,2)
=> ([3, 3, 3, 4, 4, 4, 5, 5, 5], [6, 7, 8, 6, 7, 8, 6, 7, 8])
a = np.zeros((9,9))
a[ iBlock(1,2) ] = range(1,10)
a =>
array([[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 2., 3.],
[0., 0., 0., 0., 0., 0., 4., 5., 6.],
[0., 0., 0., 0., 0., 0., 7., 8., 9.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405957.html
標籤:
上一篇:torch.sub的輸出錯誤?
