【发布时间】:2026-01-21 12:40:02
【问题描述】:
在我更一般的上一个问题之后:How to rotate an array by ± 180° in an efficient way?
我想知道如何在 C 中使用内存视图或跨步将 M×N 数组旋转 180° 而无需复制它,仅通过索引转换。
索引映射如下:
for (i in [0:M-1], j in [0:N-1]) do
rotated[i, N-1-j] = array[M-1-i, j]
旋转后的内存视图将在稍后的卷积产品中使用
【问题讨论】:
-
你打算如何访问你的旋转数组?
-
按单元格索引
-
(a) 你说你想旋转数组而不复制它,但显示一个从
array复制到rotated的映射。如果要旋转数组,可以将第一个元素与最后一个元素交换,将第二个元素与倒数第二个元素交换,等等。这将有一半的复制内存访问。 (b) 许多现代处理器具有 SIMD 功能,可以更快地执行此操作,因此最佳答案取决于您将运行的系统以及您是否可以使用非标准 C 代码作为解决方案。 -
(c) 许多卷积使用小内核,或者至少使用比您的数组小得多的内核,旋转内核而不是旋转数据数组会更快。