Eigen库学习笔记(十四)Eigen实现复杂计算
if covariance_type == 'full':
log_prob = np.empty((n_samples, n_components))
for k, (mu, prec_chol) in enumerate(zip(means, precisions_chol)):
y = np.dot(X, prec_chol) - np.dot(mu, prec_chol)
log_prob[:, k] = np.sum(np.square(y), axis=1)
下面测试程序只是为了测试实现:log_prob[:, k] = np.sum(np.square(y), axis=1)
#include<Eigen/Core>
#include<iostream>
#include <fstream>
#include <vector>
using namespace std;
using namespace Eigen;
int main()
{
MatrixXf input(2, 4);
input << -1, -2, -3, -4,
- 1, -2, -3, -4;
MatrixXf X(4, 1);
X << -1, -2, -3, -4;
MatrixXf den(2, 1);
den << 2, 1;
MatrixXf log_prob(input.rows(), input.cols());
for (int k = 0; k < input.cols(); k++)
{
log_prob.col(k) = input.col(k).array().square().rowwise().sum();
}
cout << "log_prob: \n" << log_prob << endl;
return 0;
}
执行结果:
log_prob:
1 4 9 16
1 4 9 16