以下实现的是一个描述子降维从256降到32,一个简单的矩阵乘法实现
(N,256)*(256,32)=(N,32)
#include <Eigen/Core> //Eigen矩阵乘法
start7 = get_current_time();
float* new_values1_after_NMS = new float[kp_nums*256];
for(int kp_index=0;kp_index<kp_nums;kp_index++)
{
for(int i=0;i<256;i++)
{
GET(new_values1_after_NMS,kp_index,i)=GET_VALUE(new_values1,i,keypoint[kp_index].first,keypoint[kp_index].second);
}
}
//动态创建矩阵,即运行时创建,不是编译时创建. shape=(kp_nums,256)
//RowMajor表示行主序,即按行遍历
MatrixXf descriptor_eigen = Map<Matrix<float,Dynamic,Dynamic,RowMajor>>(new_values1_after_NMS,kp_nums,256);
// shape=(256,32)
MatrixXf pca_weight_eigen = Map<Matrix<float,Dynamic,Dynamic,RowMajor>>(pca_weight,256,32);
MatrixXf new_descriptor_eigen = descriptor_eigen*pca_weight_eigen;
end= get_current_time();
for(int i=0;i<5;i++)
{
print(new_descriptor_eigen(0,i));
}
print("PCA Eigen cost time:",double(end-start7));