добавление новых осей для облегчения трансляции, лучший способ? - PullRequest
0 голосов
/ 28 октября 2018

Я ищу хороший способ «очистить» размеры двух массивов, которые я хотел бы объединить, используя широковещательную передачу. В частности, я хотел бы транслировать одномерный массив до формы многомерного массива изатем добавьте два массива.Мое понимание правил вещания говорит мне, что это должно сработать, если измерение last многомерного массива совпадает с измерением одномерного массива.Например, массивы с формами (, 3) и (10,3) добавили бы штрафа

Моя проблема в том, что при построении массива совпадающим размером будет first размерность массива, поэтому правила вещания не соблюдаются.Для справки, мой массив d имеет форму (, 3), а многомерный массив - (3,10,10,50).

Я мог бы исправить это, изменив многомерный массив так, чтобы совместимыйизмерение - это последнее измерение, но я бы хотел этого избежать, так как считаю, что логику изменения формы сложно придерживаться, когда разные измерения имеют конкретное значение.

Я также могу добавить пустые измерения в одномерный массив, как показано в коде ниже, до тех пор, пока одномерный массив не будет иметь столько же измерений, сколько и массив высокого измерения, как в фрагменте кода ниже.

>>> import numpy as np
>>> a = np.array([[1,2],
>>>               [3,4],
>>>               [5,6]])
>>> b = np.array([10,20,30])
>>> a+b[:,None]
array([[11, 12],
   [23, 24],
   [35, 36]])

Это дает мне желаемый результат, однако в моем случае у моего многомерного массива есть 4 разные оси, поэтому мне нужно было бы добавить несколько пустых измерений, которые начинают казаться не элегантными.Я могу сделать что-то вроде

b = b[[slice(None)] + 3*[np.newaxis]]

, а затем продолжить, но это не кажется великолепным.В более общем смысле можно представить, что нужно произвольное количество новых осей по обе стороны от исходного одного измерения и написать вспомогательную функцию для обобщения вышеупомянутой логики.Есть ли лучший способ добиться этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...