我正在开发一个开源科学库(用 C 编写),我们想要支持的操作之一是让“消费者”从“生产者”复制多维数组的任意切片。例如,假设我们有一个 4x5 二维数组(我为格式化道歉):
10、20、30、40
50、60、70、80
90, 100, 110, 120
130, 140, 150, 160
170、180、190、200
这些虽然作为大小为 20 的线性阵列公开:10、20、30、40、50、60、...、200
用户代码基本上传入了它想要选择的偏移量和计数(基本上是坐标):
开始[2] = {0, 2}(x 开始,y 开始)
count[2] = {3, 2}(x 计数,y 计数)
这意味着对于 x 维度,从 0 位置开始,给我 3(x 坐标范围是 [0:2],对于 y 维度,从位置 2 开始,给我 2(y 坐标范围然后是 [3 ,4])。
这应该导致
130、140、150、170、180、190
复制到用户缓冲区(长度为 6)。
所以我们知道:我们知道数组的维度大小 (4x5)、维度数 (2) 以及用户想要的“坐标”。
数组维度可以是任意数量的维度... 1、2、3.. 6?100?因为在科学应用程序中,数组具有非常大的维度是很常见的。
这是C代码,老实说我想不出一个算法,把它变成代码来解决问题。我来自生物学背景,所以我对编码的算法思维方面没有太多经验。
有没有人对如何解决这个问题有任何建议?非常感谢您的帮助!