2013-12-10 4 views
2

У меня есть два массива, x = np.arange(3) = [0,1,2,3] и y = np.arange(4) = [0,1,2].продукт массивов разных размеров в numpy

Есть ли функция numpy, которая дает таблицу всех своих продуктов? Или пример времени это было бы:

x*y = [[0,0,0,0], [0,1,2,3], [0,2,4,6]] 

Это не внутренний продукт или скалярный продукт. Это можно назвать «тензорным продуктом» или чем-то еще.

ответ

6

Для внешнего продукта, особенно там np.outer:

>>> x = np.arange(3) 
>>> y = np.arange(4) 
>>> np.outer(x, y) 
array([[0, 0, 0, 0], 
     [0, 1, 2, 3], 
     [0, 2, 4, 6]]) 
>>> 

В целом вы можете добиться этого с вещания:

>>> x = np.arange(3) 
>>> y = np.arange(4) 
>>> x[..., None] * y[None, ...] 
array([[0, 0, 0, 0], 
     [0, 1, 2, 3], 
     [0, 2, 4, 6]]) 
>>> 

Чтобы применить функцию с двумя параметрами по всем парам, вы бы определить это как:

def f(x, y): 
    return x * y 

Вы можете использовать его следующим образом:

>>> f(x[..., None], y[None, ...]) 
array([[0, 0, 0, 0], 
     [0, 1, 2, 3], 
     [0, 2, 4, 6]]) 
>>> 

Чтобы применить функцию с одним параметром поверх внешнего продукта вы могли бы сделать:

np.exp(np.outer(x, y)) 

или

np.exp(x[..., None] * y[None, ...]) 

Подробнее о вещании:

+0

Может быть 'np.outer' обобщаются я получаю таблицу' [[F (а, б) для х] при Ь в г] 'для произвольной функции' Р (х, у) '? –

+0

Без 'np.outer' numpy жаловался, что я умножил матрицы двух разных размеров. Фактически, я использовал '*', который как внутренний продукт. Я закончил с использованием более медленного метода со списком. –

+0

Ваш комментарий работал 'f (np.outer (x, y))'. В моем случае, 'f = np.exp'. –

Смежные вопросы