это ошибка numpy расширенной индексации? - PullRequest
1 голос
/ 13 апреля 2020

При работе с расширенной индексацией numpy произошел странный результат. Это ошибка или ограничение numpy?

>>> a = np.arange(9).reshape((3,3,))
>>> a[0,1]         # OK
1
>>> a[[0,1]]       # OK
array([[0, 1, 2],
       [3, 4, 5]])
>>> a[[[0,1]]]     # ? (the result is 2-dim instead of 3-dim. just as same as a[[0,1]]. )
array([[0, 1, 2],
       [3, 4, 5]])
>>> a[[[[0,1]]]]   # ?
array([[[0, 1, 2],
        [3, 4, 5]]])

Я также попробовал следующее, все нормально.

>>> a[[[0,1]],]   # OK
array([[[0, 1, 2],
        [3, 4, 5]]])

1 Ответ

2 голосов
/ 13 апреля 2020

В текущей версии 1.18:

In [13]: a[[[0,1]]]                                                                                    
/usr/local/bin/ipython3:1: 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.
  #!/usr/bin/python3
Out[13]: 
array([[0, 1, 2],
       [3, 4, 5]])
In [14]: a[np.array([[0,1]])]                                                                          
Out[14]: 
array([[[0, 1, 2],
        [3, 4, 5]]])
In [15]: _.shape                                                                                       
Out[15]: (1, 2, 3)

Другими словами, предыдущие версии интерпретировали [13] как

In [16]: a[([0,1],)]                                                                                   
Out[16]: 
array([[0, 1, 2],
       [3, 4, 5]])
In [17]: _.shape                                                                                       
Out[17]: (2, 3)

In [18]: a[([[0,1]],)].shape                                                                           
Out[18]: (1, 2, 3)

Numpy, медленно очищая индексирование крайние случаи, которые были в основном результатом слияния нескольких различных числовых c пакетов лет a go.

===

Ваш комментарий кейс в удобочитаемой форме:

In [19]: a[[0,1],[0,1]]                                                                                
Out[19]: array([0, 4])
In [20]: a[[[0,1],[0,1]]]                                                                              
/usr/local/bin/ipython3:1: 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.
  #!/usr/bin/python3
Out[20]: array([0, 4])
In [21]: a[([0,1],[0,1])]                                                                              
Out[21]: array([0, 4])
In [22]: a[[[[0,1],[0,1]]]]                                                                            
/usr/local/bin/ipython3:1: 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.
  #!/usr/bin/python3
Out[22]: 
array([[[0, 1, 2],
        [3, 4, 5]],

       [[0, 1, 2],
        [3, 4, 5]]])
In [23]: a[np.array([[[0,1],[0,1]]])]                                                                  
Out[23]: 
array([[[[0, 1, 2],
         [3, 4, 5]],

        [[0, 1, 2],
         [3, 4, 5]]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...