<p>你犯了一个经典的错误,假设*运算符是做矩阵乘法的。这在Python/numpy中是不正确的(请参见<a href="http://www.scipy-lectures.org/intro/numpy/operations.html" rel="nofollow noreferrer">http://www.scipy-lectures.org/intro/numpy/operations.html</a>和<a href="https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html" rel="nofollow noreferrer">https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html</a>)。我把它分解成中间步骤并使用了点函数</p>
<pre><code>import numpy as np
def Mahalanobis(x, covariance_matrix, mean):
x = np.array(x)
mean = np.array(mean)
covariance_matrix = np.array(covariance_matrix)
t1 = (x-mean)
print(f'Term 1 {t1}')
icov = np.linalg.inv(covariance_matrix)
print(f'Inverse covariance {icov}')
t2 = (x.transpose()-mean.transpose())
print(f'Term 2 {t2}')
mahal = t1.dot(icov.dot(t2))
#return (x-mean)*np.linalg.inv(covariance_matrix).dot(x.transpose()-mean.transpose())
return mahal
#variables x and mean are 1xd arrays; covariance_matrix is a dxd matrix
#the 1xd array passed to x should be multiplied by the (inverted) dxd array
#that was passed into the second argument
#the resulting 1xd matrix is to be multiplied by a dx1 matrix, the transpose of
#[x-mean], which should result in a 1x1 array (a number)
Mahalanobis([2,5], [[.5,0],[0,2]], [3,6])
</code></pre>
<p>生产</p>
^{pr2}$