2017-09-03 3 views
0

I eine numpy Variable haben, die 'n' Dimensionen, beispielsweise sein kann: game_board = np.zeros((4,3,3), dtype=np.int8) Dynamically ein Vektor entlang 1 Dimension in 'n' dimensional numpy Array erhalten

Ich möchte ein Vektor entlang der ersten Dimension erhalten, basierend auf einem Vektor choose_vector choose_vector = np.array([x,y],dtype=np.int8)

ich weiß, wie ich dies tun kann statisch:

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

aber alles, was ich habe dies versucht, so weit dabei die 012.374 mithat nicht funktioniert:

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]] 

, wie ich den Index für game_boardchoose_vector gegeben, um konstruieren Sie das gleiche Ergebnis wie game_board[:, x, y]

ich es jedes dimensionalen Spielbrett erweitern würde dann zu bekommen, aber ich kann es wahrscheinlich funktionieren, wenn ich weiß, wie die oben genannten zu tun :)

+0

ein direkter Ersatz zu sein, was ist 'choose_position'? Warum machst du nicht 'game_board [:, cv [0], cv [1]]'? –

+0

In der realen Implementierung kann ich also nicht unbedingt die Länge von choose_position oder die Dimensionen von game_board kennen. –

+0

choose_position war ein Tippfehler, sollte es choose_vector sein –

Antwort

0

Ich habe dies mit Hilfe von FlashTek ausgearbeitet. Statt np.newaxis zu verwenden, scheint mit Scheibe (None) für :

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

Dies könnte nicht die sauberste Lösung, aber es tut, was Sie wollen:

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()] 

Der Trick ist, dass Sie die : in Ihrem statischen Ansatz mit einem np.newaxis innerhalb eines Python list "ersetzen" können.

+0

Dies funktioniert nicht für mich leider. '[np.newaxis] + choose_vector.tolist()' wird in [Keine, x, y] aufgelöst. Dies liefert [[0,0,0]] nicht [0,0,0,0] –

Verwandte Themen