Матрица умножением вектора на третью ось - PullRequest
0 голосов
/ 19 марта 2020

Я использую python и numpy. У меня есть A матрица измерений (N, N) и вектор b измерения m. Я хотел бы умножить A на b, чтобы получить тензор размера (N, N, m). Например, если бы это было:

A 
1 2
3 4

b
1 2 3

Я хотел бы сделать произведение, чтобы получить тензор C = A*b:

C
1 2
3 4

2 4
6 8

3 6
9 12

Наконец, я хотел бы получить * Матрица (N,N) с максимальным значением C вдоль третьего направления, то есть

max(C)
3 6
9 12

, есть ли функция numpy, которая разрешает эту операцию?

Обновить

если, наконец, я хочу добавить к каждой матрице (N, N, i) из C i-й элемент вектора b?

В примере:

A
1 2
3  4

b
1  2  3

C = A*b
1  2
3  4

2  4
6  8

3  6
9  12

D = C+b
2  3
4  5

4  6
8  10

6  9
12 15

1 Ответ

0 голосов
/ 19 марта 2020

Вот один из способов использования вещания :

(b[:,None,None] * A).max(0)

array([[ 3,  6],
       [ 9, 12]])

Обновление : вы можете добавить b к каждой внутренней матрице с помощью:

b[:,None,None] * (1+A)

array([[[ 2,  3],
        [ 4,  5]],

       [[ 4,  6],
        [ 8, 10]],

       [[ 6,  9],
        [12, 15]]])

Настройка:

A = np.array([[1,2], [3,4]])
b = np.array([1,2,3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...