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

Python 我可以使用哪个numpy命令多次减去不同维度的向量?,python,arrays,numpy,for-loop,Python,Arrays,Numpy,For Loop,我必须编写这个函数: 其中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) 这是我得到的两个数组的变换维数。问题是,我必须这样做,但要使用迭代“for循环

我必须编写这个函数: 其中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)
这是我得到的两个数组的变换维数。问题是,我必须这样做,但要使用迭代“for循环”,因为exp函数应该给我一个向量作为结果。因此,我必须获得一种被划分为N个块的矩阵。

我理解,如果这能给出预期的结果,那么尝试一下,但仍然存在一个问题,即结果的形状与
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]]
[[0 1]
 [2 3]
 [4 5]]
c
是:

[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
[[0 1]
 [2 3]
 [4 5]]
函数
x
变为:

[[-6 -6]
 [ 0  0]
 [ 6  6]
 [12 12]
 [18 18]]

从我对这个问题的理解来看,问题似乎在于计算向量范数的方式,而不是减法。使用您的示例,但计算
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的第一行减去?你能为x形(5,2)和c形(3,2)添加示例数据吗?我想你需要在x中添加另一个轴来解释向量
c
:即
x[:,None]-c
,以给出一个形状数组
(150,20,2)
iGian我添加了一个示例:)对于矩阵的元素1,1,你指的是
(8-1)+(8-5)
?无论如何,结果似乎仍然是一个具有相同形状x的矩阵……您可能需要类似于
(x[:,None,:]-c)的东西。重塑(-1,2)
。如果不进行重塑,您将有150块
(N,2)
数组,如
res[0,…]