試圖讓我的代碼更有效率和可讀性,我卡住了。假設我想要構建像棋盤一樣的東西,在8x8網格上交替顯示黑色和白色。因此,使用numpy的,我已經做到了這一點:numpy中的交替值
import numpy as np
board = np.zeros((8,8), np.int32)
for ri in range(8):
for ci in range(8):
if (ci + ri) % 2 == 0:
board[ri,ci] = 1
這很好地輸出:
array([[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1]], dtype=int32)
那我就可以解析爲白色方塊或黑色方塊。但是,在實踐中,我的數組要大得多,而且這種方式效率很低且不可讀。我以爲numpy的已經有這個想通了,所以我嘗試這樣做:
board = np.zeros(64, np.int32)
board[::2] = 1
board = board.reshape(8,8)
但是,輸出是錯誤的,是這樣的:
array([[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 0]], dtype=int32)
有沒有更好的方式來實現我想要的有效地工作(並且最好是可讀的)?
注:我沒有連接到1和0的,這可以很容易地與其它類型的值,即使真/假或2種串完成的,只要它的作品
相關:[如何使棋盤在numpy?](https://stackoverflow.com/q/2169478/190597) – unutbu