c - 使用循环平铺从矩阵中提取子矩阵

标签 c loops compiler-construction transformation tiling

我有以下 4x4 矩阵:

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]

这就像 openCV 的“Rect”(http://docs.opencv.org/java/org/opencv/core/Rect.html)功能,但我不想使用 OpenCV。

我必须使用并行编译器,所以我想使用文献中出现的著名循环变换来提取子矩阵:“循环平铺”(也称为“循环阻塞”或“循环展开和堵塞”或“循环剥离和交换”)。 - ( http://en.wikipedia.org/wiki/Loop_tiling )

这可能吗?

最佳答案

这可能吗?

当然……

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

关于c - 使用循环平铺从矩阵中提取子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442166/

相关文章:

c - 查找二进制数中的尾随 0

c - OpenSSL ASN.1 API 是否支持可扩展类型?

php - 如何在 PHP 字符串中创建 while 循环?

r - 在 ggplot2 中使用循环进行多个绘图

循环内的 JavaScript 闭包 – 简单的实际示例

compiler-construction - 使用yacc构建符号表时如何考虑范围?

c - 打印包含元音的子字符串

c - 为char*分配内存 C语言

c++ - Visual C++ 2010 快速编译错误

assembly - x86 的简单寄存器分配方案