c++进行矩阵的乘积运算时,有两种方法:
法一:直接按照矩阵规则进行运算
//matrix1和matrix2为两个需要相乘的矩阵,getMatrixMultiple为矩阵乘积
void MatrixMultiple(float matrix1[MATRIX1_ROW][MATRIX1_COL], float matrix2[MATRIX2_ROW][MATRIX2_COL], float getMatrixMultiple[MATRIX1_ROW][MATRIX2_COL])
{
//vector<Vec3f> robotPoint;
memset(getMatrixMultiple, 0.0, sizeof(getMatrixMultiple));
for (unsigned int i = 0; i < MATRIX1_ROW; i++)
{
for (unsigned int j = 0; j < MATRIX2_COL; j++)
{
float ret = 0;
for (unsigned int k = 0; k < MATRIX1_COL; k++)
{
ret += matrix1[i][k] * matrix2[k][j]; //按照矩阵的乘法规则进行运算
}
//robotPoint.push_back(ret);
getMatrixMultiple[i][j] = ret;
}
}
//cout << robotPoint << endl;
printf("Matrix Multiple:\n");
for (unsigned int i = 0; i < MATRIX1_ROW; i++)
{
for (unsigned int j = 0; j < MATRIX2_COL; j++)
cout << getMatrixMultiple[i][j]<<" ";
cout << endl;
}
//printf("%.10f %.10f %.10f \n", static_cast<double>(robotPoint[i][0]), static_cast<double>(robotPoint[i][1]), static_cast<double>(robotPoint[i][2]));
}
法二:将矩阵变为opencv的Mat格式,再使用*进行矩阵运算
两个格式为Mat的矩阵可以直接矩阵相乘即:m1*m2,结果即为矩阵乘积,而不是点乘(对应点相乘)
将矩阵变为Mat格式的方法,如:Mat a1 = (Mat_<float>(1, 3) << 14, 17, 1);这就表示矩阵[14,17,1]保存为Mat格式的矩阵。当然,二维也是可以的。
如:
Mat a1 = (Mat_<float>(1, 3) << 14.8, 1.7, 5.0);
cout << "1行3列转成Mat格式:" << endl << a1 << endl;
Mat a2 = (Mat_<float>(2, 3) << 14.8, 1.7, 5.0, 1.8, 2.0, 3.0);
cout << "2行3列转成Mat格式:"<< endl << a2 << endl;