使用向量化将函数应用于 Numpy 二维数组中的每一行

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)

也就是说,它不会单独传递矩阵的每一行。相反,它传递矩阵的每个条目(不是我想要的)。

我怎样才能改变它以获得所需的行为?

Bob*_*ley 1

我建议只使用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