我有一個1000x784的數據矩陣(10000個示例和784個特徵),調用X_valid
,我想將下列函數應用於此矩陣中的每一行並獲取數值結果:使用矢量化將函數應用於Numpy二維數組中的每一行
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'
也就是說,它不是單獨傳遞矩陣的每一行。相反,它傳遞給矩陣的每個條目(不是我想要的)。
我該如何改變這種情況以獲得所需的行爲?