2017-09-03 25 views
0

我有一個numpy的變量,可以是「N」的尺寸,例如: game_board = np.zeros((4,3,3), dtype=np.int8) 動態獲得沿1維的矢量在「n」個維numpy的陣列

欲獲得沿着第一維度的矢量基於在矢量choose_vector choose_vector = np.array([x,y],dtype=np.int8)

我知道我可以靜態地做到這一點:

game_board[:, x, y] 
# will return [0,0,0,0], the (x,y)th element from 1st dimension 

但一切我都試過到目前爲止這樣使用choose_vector沒有奏效:

game_board[:, choose_vector] 
# returns 
[[[0 0 0] 
    [0 0 0]] 

[[0 0 0] 
    [0 0 0]] 

[[0 0 0] 
    [0 0 0]] 

[[0 0 0] 
    [0 0 0]]] 

print(game_board[choose_vector]) 
# returns 
[[0,0,0]] 

我如何構建,以獲得相同的結果game_board[:, x, y]

那麼我想它擴展到任何尺寸的遊戲板給choose_vectorgame_board指數,但我大概可以解決這個問題,如果我知道該怎麼做上面:)

+0

什麼是'choose_position'?你爲什麼不去'game_board [:, cv [0],cv [1]]'? –

+0

所以在真正的實現中,我可能不一定知道choose_position的長度或game_board的尺寸。 –

+0

choose_position是一個錯字,它應該是choose_vector –

回答

0

我在FlashTek的幫助下完成了這項工作。而不是使用np.newaxis,使用切片(無)似乎是一個下降替代:

import numpy as np 
x,y = 0,0 

game_board = np.zeros((4,3,3), dtype=np.int8) 
choose_vector = np.array([x, y], dtype=np.uint8) 
game_board[[slice(None)] + choose_vector.tolist()] 
0

這可能不是最乾淨的解決方案,但它做你想要的東西:

import numpy as np 
x,y = 0,0 

game_board = np.zeros((4,3,3), dtype=np.int8) 
choose_vector = np.array([x, y], dtype=np.uint8) 
game_board[[np.newaxis] + choose_vector.tolist()] 

訣竅是,你可以在你的靜態方法中用np.newaxis代替: python list

+0

這不適用於我不幸的。 '[np.newaxis] + choose_vector.tolist()'解析爲[None,x,y]。 這會返回[[0,0,0]]而不是[0,0,0,0] –