In [309]: a = np.array([[1, 2], [3, 4]]); b = np.array([[4, 5], [6, 7]])
С помощью broadcasting
мы можем взять различия строк:
In [310]: a[:,None,:]-b[None,:,:]
Out[310]:
array([[[-3, -3],
[-5, -5]],
[[-1, -1],
[-3, -3]]])
и уменьшить значения с максимальным / абсолютным значением на последней оси (я думаю, это то, что вы подразумеваете под sup norm
:
In [311]: np.abs(a[:,None,:]-b[None,:,:]).max(axis=-1)
Out[311]:
array([[3, 5],
[1, 3]])
При subtract.outer
мне нужно выбрать подмножество результатов и затем транспонировать:
In [318]: np.subtract.outer(a,b)[:,[0,1],:,[0,1]].transpose(2,1,0)
Out[318]:
array([[[-3, -3],
[-1, -1]],
[[-5, -5],
[-3, -3]]])
Я не вижу элементов управления axis
в outer
документы. Поскольку широковещание дает более точное управление, я не видел особого применения функции ufunc.outer
.