我有一个问题,基本上,我有两个矩阵(向量),一个大质量矩阵和一个较小的矩阵。我有一个算法将大块矩阵分成块(大块的大小)
所以例如(我在这里使用测试数据)所以大块矩阵大小是:4x4而小矩阵是2x2然后我将特定块(在当前位置)传递给一个函数,该函数检查是否如果小矩阵等于大块(在该特定位置),则返回true,否则返回false。
我可以像这样输出每个块:
bool compareMatrix(vector<double> &theMatrix1, vector<double> &theMatrix2, int startRow, int startCol)
{
// I can output the matrix blocks like this:
cout << theMatrix1[startRow*2+startCol] << endl;
}
但是我不太明白如何将块(在startingRow / Col处)与小矩阵进行比较..
这是怎么回事: 矩阵1:(4x4)
0 1 0 1
1 1 0 1
0 0 1 1
0 1 1 1
矩阵2:(2x2)
0 1
0 1
然后我将块分成2x2:
B1 =
0 1
1 1
B1等于theMatrix2 - 否则返回false
B2 =
0 1
0 1
B2等于theMatrix2 - 是,所以返回true
我真的试图尽可能详细地解释事情,希望有人可以给我一些建议,因为我已经做了很长时间了!
谢谢
答案 0 :(得分:0)
如果知道大矩阵的大小,你可以将它的小部分与你的2x2矩阵进行比较
int bigMatrixSize=4;
bool compare(...)
{
for (int i=0; i<2; ++i)
for (int k=0; k<2; ++k)
if(bigMatrix[k+startX+(i+staryY)*bigMatrixSize] != smallMatrix[k][i])
return false;
return true;
}
我遗漏了检查和其他一些东西,但它应该给你一个想法。
答案 1 :(得分:0)
bool compareMatrix(vector<double> &theMatrix1, int nRow1, int nCol1, vector<double> &theMatrix2, int nRow2, int nCol2, int startRow, int startCol)
{
int p1 = startRow * nCol1 + startCol, p2 = 0;
for (int y = 0; y < nRow2; ++y)
{
for (int x = 0; x < nCol2; ++x)
{
if (theMatrix1[p1 + x] != theMattrix2[p2 + x]) // You can use memcmp here, but it's safer let compiler do the optimization.
{
return false;
}
}
p1 += nCol1;
p2 += nCol2;
}
return true;
}
你想要这样的东西吗?您可以将列数添加到到达下一行的位置。