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

2024-04-20 11:44:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须写这个函数: enter image description here 其中x是维数为[150,2]的向量,c是[N,2](假设N=20)。从每个组分席(i=1,2),我必须用这种方式减去C的成分([X11-C11,X12C12])…((X11-CN1,X12CN2]),用于所有150个样品。 我已经用同样的方法变换了它们,我可以减去它们,但是函数的结果应该是一个向量。也许我该怎么用numpy写这个? 谢谢你 好,假设x=(5,2),c=(3,2) enter image description here 这是我得到的两个数组的变换维数。问题是,我必须这样做,但是要使用迭代“for循环”,因为exp函数应该给我一个向量作为结果。所以我要得到一种被分成N块的矩阵。你知道吗


Tags: 方法函数numpy方式样品数组向量成分
2条回答

从我对这个问题的理解来看,问题似乎出在计算向量范数的方法上,而不是减法。使用您的示例,但计算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)

^{}将尝试在其输入的所有维度上返回某种矩阵范数,除非您明确告诉它哪个轴表示向量分量。你知道吗

我理解,如果这给出了预期的结果,那么尝试一下,但是仍然存在一个问题,即结果具有相同的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]]

相关问题 更多 >