2 回答

TA贡献1850条经验 获得超11个赞
根据我对这个问题的理解,问题似乎在于您计算向量范数的方式,而不是减法。使用您的示例,但计算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 将尝试在其输入的所有维度上返回某种矩阵范数,除非您明确告诉它哪个轴代表向量分量。

TA贡献1875条经验 获得超5个赞
我明白了,试试这是否给出了预期的结果,但仍然存在结果具有相同形状的问题x:
import numpy as np
x = np.arange(10).reshape(5,2)
c = np.arange(6).reshape(3,2)
c_col_sum = np.sum(c, axis=0)
for (h,k), value in np.ndenumerate(x):
x[h,k] = c.shape[0] * x[h,k] - c_col_sum[k]
最初x是:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
并且c是:
[[0 1]
[2 3]
[4 5]]
之后函数x变成:
[[-6 -6]
[ 0 0]
[ 6 6]
[12 12]
[18 18]]
添加回答
举报