Присвоение массивов Numpy с расширенным смешанным индексированием
Я получаю очень странное сообщение об ошибке при попытке назначить некоторые элементы массива. Я использую комбинацию ломтика и набора индексов. Смотрите следующий простой пример.
import scipy as sp
a = sp.zeros((3, 4, 5))
b = sp.ones((4, 5))
I = sp.array([0, 1, 3])
b[:, I] = a[0, :, I]
Этот код поднимает следующееValueError
:
ValueError: несоответствие формы: массив значений shape (3,4) не может быть передан для индексации результата shape (3,4)
-
Следовать заБудьте осторожны при использовании комбинации фрагмента и последовательности. целых чисел. Как указано на GitHub:
x = rand(3, 5, 7)
print(x[0, :, [0,1]].shape)
# (2, 5)
print(x[0][:, [0,1]].shape)
# (5, 2)
Так работает numpy, но, тем не менее, немного сбивает с толку тот факт, что x [0] [:, I] отличается от x [0,:, I]. Поскольку это поведение, которое я хочу, я решил использовать x [0] [:, I] в своем коде.