为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2021-08-14 19:34:54
我必须写这个函数: 其中 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)这是我获得的两个数组的转换维度。问题是,我必须这样做,但是使用“for 循环”迭代,因为 exp 函数应该给我一个向量。所以我必须获得一种分为 N 块的矩阵。
查看完整描述

2 回答

?
慕盖茨4494581

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 将尝试在其输入的所有维度上返回某种矩阵范数,除非您明确告诉它哪个轴代表向量分量。


查看完整回答
反对 回复 2021-08-14
?
慕田峪4524236

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]]


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号