2013-12-07 6 views
1

У меня есть следующие матрицы 4x4:извлечение подматрица из матрицы с петлевой черепицей

1 2 3 4 

5 6 7 8 

9 10 11 12 

13 14 15 16 

и я хочу извлечь и хранить (в некоторых новостных переменных) на четыре следующих подматрицу 2х2:

[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)

Возможно ли это?

+0

Loop плиточного только полезно, когда у вас есть много повторений, так как вы можете извлечь выгоду из кэша местности к югу матрицы. Что вы планируете делать с этими плитами? См. Также - http://stackoverflow.com/questions/20367246/loop-tiling-how-to-choose-block-size/20372396#20372396 – Leeor

+0

Я хочу распространять эти подматрицы на другие темы или устройства Cuda или другие. – user3077628

+1

Вам не нужно * использовать * петлевую черепицу для самой извлечения, поскольку вы не повторяете процесс, это всего лишь разовая подготовка. – Leeor

ответ

0

Возможно ли это?

Конечно ...

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]; 

 Смежные вопросы

  • Нет связанных вопросов^_^