【问题标题】:Converting 1-d array to 2d将一维数组转换为二维
【发布时间】:2020-03-26 01:43:36
【问题描述】:

我正在尝试理解这段代码:

void stencil(const int nx, const int ny, const int width, const int height,
             double* image, double* tmp_image)
{
  for (int j = 1; j < ny + 1; ++j) {
    for (int i = 1; i < nx + 1; ++i) {
      tmp_image[j + i * height] =  image[j     + i       * height] * 3.0 / 5.0;
      tmp_image[j + i * height] += image[j     + (i - 1) * height] * 0.5 / 5.0;
      tmp_image[j + i * height] += image[j     + (i + 1) * height] * 0.5 / 5.0;
      tmp_image[j + i * height] += image[j - 1 + i       * height] * 0.5 / 5.0;
      tmp_image[j + i * height] += image[j + 1 + i       * height] * 0.5 / 5.0;
    }
  }
}

一维数组表示法非常混乱。我正在尝试将其转换为二维符号(我发现它更易于阅读)。有人能指出我如何做到这一点的正确方向吗?

【问题讨论】:

  • 如果您提供一个 small 数组示例,您希望将其从一种表示形式转换为另一种表示形式,这将很有帮助。
  • 很明显一维数组是以列为主格式存储的,总是乘以height的值是列号,加上它的是行号。您不清楚其中哪一部分?
  • 好的,所以循环中的第二行基本上是这样的:tmp_image[j][i] += image[j][i-1]*0.5/5.0?
  • 您使用的是 C 编译器还是 C++ 编译器?
  • @chux-ReinstateMonica 是的,这很奇怪。请注意,未使用参数 width 以及 heightny 的关系。通常你只需要一个。通常在nynx 这样的东西中确定一维数组的长度。很奇怪的结构。长度至少需要为ny+(nx+1)*height+1

标签: c++ c arrays


【解决方案1】:

这段代码所做的只是从原始图像中创建一个新图像,从相应像素中提取 60%,从每个相邻像素中提取 10%。

当您看到tmp_image[j + i * height] 时,将其读作tmp_image[i][j]

将代码更改为真正使用 2D 语法可能需要在编译时知道至少一个维度,而现在它是运行时参数。所以这可能不是一个初学者,除非你使用 C++ 并且想要编写或使用矩阵类而不是普通数组。

【讨论】: