Как правильно настроить код из-за этого futurewarning? (многомерная индексация numpy)

#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],)] , это должно позаботиться об этом.