我正在用 Python 制作一個可玩井字游戲的極小極大演算法。我需要將所有可能的 ndarray 組合存盤在不同的 ndarray 中。我將板子存盤在一個 numpy 陣列中,所以一個空板子是[[0,0,0],[0,0,0],[0,0,0]],X 是 1,O 是 -1。我想以這種方式做到這一點:首先,我np.array([])在其中添加了在下一步之后可能發生的所有狀態,因此對于棋盤上的第一步,它看起來像[[[1,0,0],[0,0,0],[0,0,0]],[[0,1,0],[0,0,0],[0,0,0]],[...]]. 我試過 np.append 和 np.concatenate,但我不能讓它像我想要的那樣作業。我該怎么辦?
uj5u.com熱心網友回復:
您需要的唯一技巧是廣播以生成額外的堆疊維度。(這里我已經用這個附加維度創建了第一個狀態條件,但你可以在 stackin 之前廣播它
這是一個可能的解決方案:
import numpy as np
states = np.random.randn(1,3,3)
print(f"actual Shape is: {states.shape}")
for i in range(3):
newState = np.random.randn(3,3)
states = np.append(states,newState[None,:,:],axis=0)
print(f"actual Shape is: {states.shape}")
你也可以使用vstack或concatenate
states = np.vstack([states,newState[None,:,:]])
states = np.concatenate([states,newState[None,:,:]],axis=0)
uj5u.com熱心網友回復:
這可以通過np.append. 附加 numpy 陣列時,陣列應具有相同的維數。因此,為了獲得您想要的結果,您可以像這樣進行:
import numpy as np
tictactoe = np.zeros(shape=(1, 3, 3)) # create an empty array
n = np.array([[[0, 0, 0], [0, 1, 0], [0, 1, 0]]]) # example of value to add
tictactoe = np.append(tictactoe, n, axis=0) # adding the value in
print(tictactoe)
為了完成這項np.append作業,請注意我將其中一個板axis=0作為三維陣列傳遞到第一個軸中[[[0, 0, 0], [0, 1, 0], [0, 1, 0]]]。注意三括號。這應該會給你一個形狀的結果,(2, 3, 3)其中2代表你擁有的板數。
否則,這是一種無需 numpy 的基本方法,只需附加一個串列即可:
tictactoe = []
n = [[0, 0, 0], [0, 1, 0], [0, 1, 0]]
tictactoe.append(n)
print(tictactoe)
Nb 如@hpaulj注釋中所述,np.appendwith 軸與 相同np.concatenate。這種迭代使用可能會很慢,并且在開始時需要特別小心。這是一個相關問題的鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369812.html
上一篇:使用sympy解方程
