Извлечение подматрицы из матрицы с разбиением на петли
У меня есть следующая матрица 4х4:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
и я хочу извлечь и сохранить (в некоторых новостных переменных) четыре следующих подматрицы 2x2:
[1 2
5 6]
[3 4
7 8]
[9 10
13 14]
[11 12
15 16]
Это похоже на функцию "Rect" ( http://docs.opencv.org/java/org/opencv/core/Rect.html) в openCV, но я не хочу использовать OpenCV.
Я должен использовать распараллеливающий компилятор, и поэтому я хотел бы сделать извлечение подматрицы с известным преобразованием цикла, представленным в литературе: "циклическое разбиение цикла" (также известное как "блокировка цикла" или "разматывание цикла и замятие" или "цикл"). Стриптиз и развязка "). - ( http://en.wikipedia.org/wiki/Loop_tiling)
Является ли это возможным?
1 ответ
Является ли это возможным?
Конечно …
int n = 4;
int matrix[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
int submatrixes[n/2*n/2][2][2];
int i, j, x, y, z;
for (z = i = 0; i < n; i += 2)
for (j = 0; j < n; j += 2, ++z)
for (x = 0; x < 2; x++)
for (y = 0; y < 2; y++)
submatrixes[z][x][y] = matrix[i+x][j+y];