Rya*_*yan 6 numpy vectorization
我调用了一个 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)
Run Code Online (Sandbox Code Playgroud)
(x_valid只是一行数据)。我使用 numpyvectorize通过以下代码来执行此操作:
v_predict_prob = np.vectorize(predict_prob)
scores = v_predict_prob(X_valid, covariance[num], means[num], priors[num])
Run Code Online (Sandbox Code Playgroud)
(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'
Run Code Online (Sandbox Code Playgroud)
也就是说,它不会单独传递矩阵的每一行。相反,它传递矩阵的每个条目(不是我想要的)。
我怎样才能改变它以获得所需的行为?
我建议只使用for循环:
def v_predict_prob(X_valid, c, m, p):
out = []
for row in X_valid:
out.append(predict_prob(row, c, m, p))
return np.array(out)
Run Code Online (Sandbox Code Playgroud)
在引擎盖下np.vectorize正在做同样的事情:http://docs.scipy.org/doc/numpy-1.10.1/reference/ generated/numpy.vectorize.html
| 归档时间: |
|
| 查看次数: |
2913 次 |
| 最近记录: |