Если я правильно понял (т.е. вы хотите получить один элемент из qn
программно), все, что вам нужно сделать, это использовать tuple
вместо list
.Обратите внимание, что нарезка и описание списка, хотя они используют одинаковые квадратные скобки [
и ]
, выполняют совершенно разные операции:
item[1]
обращается к части объекта (в зависимости отфактический объект). [1, 2]
создает список с указанными в нем элементами.
Следовательно, в вашем примере NS
не может использоваться вместо 1, 0, 0
(что является tuple
), но явно убедившись, что NS
- это tuple
(в конечном итоге с тем же содержимым, что и раньше), к уловке.
import numpy as np
np.random.seed(0)
# FYI, no need to "cast" `range()` to `list`
qn = np.random.choice(range(100), 64).reshape(4, 4, 4)
NS = 1, 0, 0
# equivalent to: `NS = (1, 0, 0)`
# equivalent to: `NS = tuple(1, 0, 0)`
# equivalent to: `NS = tuple([1, 0, 0])` (this is doing a bit more, but the result is equivalent)
# this is different from: `NS = [1, 0, 0]`
print(qn[NS])
# 39
Если NS
сгенерируйте другим способом как list
, все, что вам нужно сделать, это заранее преобразовать в tuple
.
NS = [1, 0, 0]
print(qn[tuple(NS)])
Это часть сложной системы индексации NumPy .