Поднять 1 массив xn до всех степеней в массиве mx 1 до массива mxn в Python - PullRequest
1 голос
/ 21 февраля 2020

Учитывая 2 1d массива любой длины I w sh, чтобы поднять каждое значение в массиве «base» до каждой степени в массиве «exponent», чтобы получить 2d массив / матрицу.

a = [a0, a1, a2, ... , an]
b = [b0, b1, b2, ... , bm]

желаемый вывод:

[a0^b0, a1^b0, ... , an^b0 ; 
 a0^b1, a1^b1, ... , an^b1 ;
 ...
 a0^bm, a1^bm, ... , an^bm ]

Я пришел из фона Matlab, где это очень легко сделать для столбца и вектора строки:

a.^b

как описано здесь: https://www.mathworks.com/help/matlab/ref/power.html#mw_0a0fb331 -989a-442b-ba2 c -ede92a343828

Однако в Python с numpy или scipy et c я не могу найти ни одного простой способ сделать это. Я должен предположить, что есть довольно оптимизированный способ сделать это просто (без понимания списка), учитывая, насколько это интуитивно и просто в Matlab.

1 Ответ

0 голосов
/ 21 февраля 2020

В Python символ, используемый для обозначения возведения в степень, равен **, а numpy отлично поддерживает векторное возведение в степень массивов равной длины:

>>> a = np.array([1, 2, 3, 4, 5])
>>> b = np.array([5, 4, 3, 2, 1])
>>> a**b
array([ 1, 16, 27, 16,  5])

Если вы хотите получить желаемый результат, однако вы должен возвести в степень вектор строки с вектором столбца:

>>> a = np.array([[1, 2, 3, 4, 5]]) # Notice now a 2D array, a horizontal vector.
>>> b = np.array([[5, 4, 3, 2, 1]])
>>> a
array([[1, 2, 3, 4, 5]])
>>> b.T
array([[5],
       [4],
       [3],
       [2],
       [1]])
>>> a**b.T
array([[   1,   32,  243, 1024, 3125],
       [   1,   16,   81,  256,  625],
       [   1,    8,   27,   64,  125],
       [   1,    4,    9,   16,   25],
       [   1,    2,    3,    4,    5]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...