#python #arrays #numpy #indexing #future-warning
#python #массивы #numpy #индексирование #предупреждение о будущем #будущее-предупреждение
Вопрос:
Как настроить индексацию в этом коде, чтобы он работал должным образом из-за этого FutureWarning?
D:/Arc/Arc_ProjectArchitecture_Z07_Adjust_X_Ybackward_sequentialize.py:165: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
a = np.asarray([
np.asarray([
np.asarray([1,1,1,1]),
np.asarray([1,1,0,1]),
np.asarray([1,1,1,1])
]),
np.asarray([
np.asarray([1,1,1,1]),
np.asarray([1,1,1,1]),
np.asarray([1,1,1,1])
]),
np.asarray([
np.asarray([1,1,1,1]),
np.asarray([1,1,2,1]),
np.asarray([1,1,1,1])
])
np.asarray([
np.asarray([1,1,1,1]),
np.asarray([1,1,3,1]),
np.asarray([1,1,1,1])
])
np.asarray([
np.asarray([1,1,1,1]),
np.asarray([1,1,4,1]),
np.asarray([1,1,1,1])
])
np.asarray([
np.asarray([1,1,1,1]),
np.asarray([1,1,5,1]),
np.asarray([1,1,1,1])
]) ])
locs = [2,5]
print(a[[locs]])
[ [1,1,1,1]
[1,1,2,1]
[1,1,1,1] ]
[ [1,1,1,1]
[1,1,5,1]
[1,1,1,1] ]
правильно ли я понимаю, что
locs = tuple([2,5]) сделает это?
РЕДАКТИРОВАТЬ: я не просто хочу, чтобы предупреждение исчезло, потому что, как говорится, оно, вероятно, не будет работать должным образом в будущем.
РЕДАКТИРОВАТЬ: я также делаю это: (как это тоже настроить?)
a = np.array([x[-(SEQ_LEN):] for x in a])
Комментарии:
1.
a[locs]
должно быть достаточно. Вы просто выбираете блоки 2 и 5 в первом измерении. Илиa[[2,5], :, :]
(конечные ‘:’ являются автоматическими).2.
a
представляет собой массив в форме (6,3,4). Вам не нужны все этоnp.asarray
; достаточно одного.3. Какова была цель использования
[locs]
в первую очередь? Или это старый код от кого-то другого?
Ответ №1:
Для доступа к заданным элементам просто отправьте массив требуемых индексов, за которым следует ,
для представления других осей и возврата требуемых индексов по заданной оси.
array[([2,5],)]
, это должно позаботиться об этом.