我的任务是用NumPy实现一个python函数。这个函数应该计算两个矩阵P
和Q
之间的Hellinger距离,这两个矩阵的维数为(n, k)
。p_i
是P
的i
行的向量,p_i,j
是P
的j
列中i
行的值。
矩阵的Hellinger距离定义如下:
h_i = i/sqrt(2) * sqrt(sum(j=1,k) of (sqrt(p_i,j)-sqrt(q_i,j))^2)
H
是长度为n
的向量,h_i
是H
的值i
,其中i = 1,...,n
。因此,两个矩阵之间的Hellinger距离等于矩阵行之间的Hellinger距离。对于每一行,距离存储在输出向量H
中。
现在的任务是实现这个函数(使用NumPy),它将计算上面描述的问题,它将得到两个2D-NumPy数组P
和Q
,并且它应该返回一个正确长度的1D-Numpy数组H
。
我以前从未与NumPy合作过,所以如果有任何建议,我将非常感激。
我在X1 E1 F1 X上告诉了自己一些信息,但我很想得到任何建议。
1条答案
按热度按时间zf9nrax11#
我发现你需要在某些NumPy函数中使用
axis
参数(例如np.sum()
)来告诉NumPy它应该遍历数组的行还是列。return np.sqrt(1/2) * np.sqrt( np.sum((np.sqrt(P) - np.sqrt(Q))**2,axis=1) )
和它的工作。唯一的问题是,它仍然返回负值。这怎么可能,因为减法取2的幂?