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