#python #numpy
#python #numpy
Вопрос:
Когда я пытаюсь получить доступ к многомерным массивам немного другими способами, я получаю разные результаты, которые я не понимаю.
когда я запускаю:
ells=np.array([1,2,3,4])
check=np.zeros((2,2,2,len(ells)))
print(check[:,:,:,ells<=4].shape)
print(check[0,:,:,ells<=4].shape)
Я действительно могу решить эту проблему, используя
ells=np.array([1,2,3,4])
check=np.zeros((2,2,2,len(ells)))
print(check[:,:,:,ells<=4].shape)
print(check[0,:,:,:][:,:,ells<=4].shape)
однако я хотел бы понять, почему первая версия неверна.
В первом случае я ожидаю получить массивы формы (2,2,2,4) и (2,2,4), но я получаю (2,2,2,4) и (4,2,2).
Во втором случае я получаю ожидаемые ответы (2,2,2,4) и (2,2,4).
Ответ №1:
Это пример смешанного расширенного и базового индексирования:
Два внешних индекса выбирают размер 4, а два внутренних фрагмента добавляются после этого:
check[0,:,:,ells<=4]
Приведенная причина заключается в том, что существует потенциальная двусмысленность, когда расширенные индексы разделяются срезами. Но случай этой двусмысленности слабее, когда один из индексов является скалярным (это старое возражение).
Я уверен, что кто-то мог бы найти дубликат SO.