【发布时间】:2011-07-18 11:20:16
【问题描述】:
我有一个大的 2D 矩阵 A2D,其列秩和行秩始终相等,并除以 4。我想将列秩和行秩都降低到各自的四分之一 (1/4)形成另一个矩阵B2D。每个 B2D 元素是 A2D 的 4x4 子矩阵的平均值。为了清楚说明我想要做什么,我以一个简单的 8x8 矩阵为例,并提供以下代码 sn-p 供您参考。我的解决方案非常笨拙。请您向我展示另一个性能更好的解决方案。提前谢谢你。
int arr[8][8] =
{
{11, 12, 13, 14, 15, 16, 17, 18},
{21, 22, 23, 24, 25, 26, 27, 28},
{31, 32, 33, 34, 35, 36, 37, 38},
{41, 42, 43, 44, 45, 46, 47, 48},
{51, 52, 53, 54, 55, 56, 57, 58},
{61, 62, 63, 64, 65, 66, 67, 68},
{71, 72, 73, 74, 75, 76, 77, 78},
{81, 82, 83, 84, 85, 86, 87, 88}
};
int** pColAvg = new int* [8];
for (int i = 0; i < 8; i++)
pColAvg[i] = new int[2];
for (int nRow = 0; nRow < 8; nRow + 4)
{
for (int nCol = 0; nCol < 8; nCol + 4)
{
int Avg = 0;
Avg += arr[nRow][nCol];
Avg += arr[nRow][nCol + 1];
Avg += arr[nRow][nCol + 2];
Avg += arr[nRow][nCol + 3];
Avg /= 4;
pColAvg[nRow][nCol/4] = Avg;
}
}
int** pAvgArray = new int* [2];
for (int i = 0; i < 2; i++)
pAvgArray[i] = new int[2];
for (int nRow = 0; nRow < 8; nRow + 4)
{
for (int nCol = 0; nCol < 2; nCol++)
{
int Avg = 0;
Avg += pColAvg[nRow][nCol];
Avg += pColAvg[nRow + 1][nCol];
Avg += pColAvg[nRow + 2][nCol];
Avg += pColAvg[nRow + 3][nCol];
Avg /= 4;
pAvgArray[nRow/4][nCol] = Avg;
}
}
for (int i = 0; i < 8; i++)
delete [] pColAvg[i];
delete [] pColAvg;
for (int i = 0; i < 2; i++)
delete [] pAvgArray[i];
delete [] pAvgArray;
【问题讨论】:
-
我想你的意思是大小而不是等级,因为在谈到矩阵(顺便说一下,它总是二维的)时,等级意味着不同的东西。否则说二维数组。