Исходя из того, что я понимаю, проблема заключается в том, как вы вычисляете векторную норму, а не в вычитании. Используя ваш пример, но вычисляя exp(-||x-c||)
, попробуйте:
x = np.linspace(8,17,10).reshape((5,2))
c = np.linspace(1,6,6).reshape((3,2))
sub = np.linalg.norm(x[:,None] - c, axis=-1)
np.exp(-sub)
array([[ 5.02000299e-05, 8.49325705e-04, 1.43695961e-02],
[ 2.96711024e-06, 5.02000299e-05, 8.49325705e-04],
[ 1.75373266e-07, 2.96711024e-06, 5.02000299e-05],
[ 1.03655678e-08, 1.75373266e-07, 2.96711024e-06],
[ 6.12664624e-10, 1.03655678e-08, 1.75373266e-07]])
np.exp(-sub).shape
(5, 3)
numpy.linalg.norm
будет пытаться вернуть некоторую матричную норму по всем измерениям ее входных данных, если вы не укажете явно, какая ось представляет компоненты вектора.