我有一个1000x784的数据矩阵(10000个例子和784个特征),名为X_valid
,我想对该矩阵中的每一行应用以下函数,并获取数字结果:
def predict_prob(x_valid, cov, mean, prior):
return -0.5 * (x_valid.T.dot(np.linalg.inv(cov)).dot(x_valid) + mean.T.dot(
np.linalg.inv(cov)).dot(mean) + np.linalg.slogdet(cov)[1]) + np.log(
prior)
(x_valid
只是一行数据)。我正在使用numpy的vectorize
来完成此操作,以下是代码:
v_predict_prob = np.vectorize(predict_prob)
scores = v_predict_prob(X_valid, covariance[num], means[num], priors[num])
(
covariance[num]
、means[num]
和 priors[num]
只是常数.)
然而,当我运行此代码时,会出现以下错误:
File "problem_5.py", line 48, in predict_prob
return -0.5 * (x_valid.T.dot(np.linalg.inv(cov)).dot(x_valid) + mean.T.dot(np.linalg.inv(cov)).dot(mean) + np.linalg.slogdet(cov)[1]) + np.log(prior)
AttributeError: 'numpy.float64' object has no attribute 'dot'
也就是说,它不是逐行传递矩阵中的每一行。相反,它传递矩阵的每个条目(这不是我想要的结果)。
我该如何改变它以获得期望的行为?