Хранить многомерный массив массива numpy с newaxis для объекта

У меня есть код, в котором мне неоднократно нужно многократно передавать массивы сложными способами, например:

a = b[np.newaxis, ..., :, np.newaxis] * c[..., np.newaxis, np.newaxis, :] 

Есть ли объект, для которого я могу хранить эти спецификации нарезки?

т.е. (но, очевидно, это не работает):

 s1 = magic([np.newaxis, ..., :, np.newaxis]) s2 = magic([..., np.newaxis, np.newaxis, :]) 

Редактировать: возможно, это может быть сделано с помощью numpy.broadcast_to , но неясно, как именно, убедившись, что правильные оси транслируются …

  • Сюжет Python - многослойные срезы изображений
  • Использовать нотацию фрагмента с помощью collection.deque
  • Почему этот фрагмент списка обрабатывает 0 и 1 как то же самое в Python?
  • ValueError: установка элемента массива с последовательностью
  • Как принимать столбцы-фрагменты данных в пандах
  • разрезающая разреженная (scipy) матрица
  • Обозначение фрагмента в scala?
  • Python: одиночная двоеточие против двойной кишки
  • One Solution collect form web for “Хранить многомерный массив массива numpy с newaxis для объекта”

    Вы можете построить индексный кортеж вручную, но NumPy включает в себя помощник для него:

     slice_tuple = np.s_[np.newaxis, ..., :, np.newaxis] 

    Тогда b[np.newaxis, ..., :, np.newaxis] эквивалентно b[slicetuple] .


    Для справки, построение кортежа вручную было бы (np.newaxis, Ellipsis, slice(None), np.newaxis) . Кроме того, np.newaxis is None , поэтому (None, Ellipsis, slice(None), None) будет эквивалентным.


    np.s_ можно np.s_ следующим образом:

     class IndexHelper(object): def __getitem__(self, arg): return arg s_ = IndexHelper() 
    Python - лучший язык программирования в мире.