我可以使用哪个 numpy 命令多次减去不同维度的向量?

我必须写这个函数: 

http://img.mukewang.com/6117aa770001b41d02830109.jpg

其中 x 是一个维度为 [150,2] 的向量,c 是 [N,2](假设 N=20)。从每个分量 xi (i=1,2) 我必须以这种方式减去 c 的分量 ([x11-c11,x12-c12])...([x11-cN1, x12-cN2]) 对于所有的150 个样品。我以一种具有相同维度的方式对它们进行了转换,并且可以减去它们,但是函数的结果应该是一个向量。也许我怎么能用 numpy 写这个?谢谢 好的,让我们假设 x=(5,2) 和 c=(3,2)

http://img3.mukewang.com/6117aa7f0001f1cf06180504.jpg

这是我获得的两个数组的转换维度。问题是,我必须这样做,但是使用“for 循环”迭代,因为 exp 函数应该给我一个向量。所以我必须获得一种分为 N 块的矩阵。

守候你守候我
浏览 175回答 2
2回答

慕盖茨4494581

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

慕田峪4524236

我明白了,试试这是否给出了预期的结果,但仍然存在结果具有相同形状的问题x:import numpy as npx = 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]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python