у меня есть проблемы с Numpy ndarray, когда я индексировать несколько измерений одновременно:транспонировать манипуляции с индексацией над несколькими размерами
> a = np.random.random((25,50,30))
> b = a[0,:,np.arange(30)]
> print(b.shape)
Здесь я ожидал, что результат будет (50,30)
, но на самом деле реальный результат есть (30,50)
!
Может кто-нибудь объяснить это мне, пожалуйста, я не понимаю, и эта функция вводит множество ошибок в моем коде. Спасибо :)
Дополнительная информация:
индексирование в одном измерении работает отлично:
> b = a[0,:,:]
> print(b.shape)
(50,30)
И когда у меня есть транспонирование:
> a[0,:,0] == b[0,:]
True
Спасибо, Пол! Знаете ли вы, есть ли какая-либо логика этого поведения? –
Или это просто трюк, чтобы быть уверенным, что пользователь является суперфокусом при манипуляциях с ndarray: p –
В некотором смысле да, это одно из немногих правил, достаточно общих.Например, предположим, что у нас есть 'a2' 2d и' a3' 3D-массивы и некоторый линейный индексный массив 'i = 0,1,2, ...'. Тогда a2 [i, i] выбирает диагональ a 1d-массив, наблюдайте, что размеры выходного файла соответствуют размеру массива индекса, а не индексированному. Это может быть еще яснее, когда мы используем 3D-массив, подобный «a3 [i,:, i]», это должно выбрать ось y и диагональ плоскости x, z. Но в новом массиве, на какой оси должна идти первая? Существует нет «естественного» способа выбора между (diag, y) и (y, diag), поэтому с помощью _convention_ diag идет первым. –