【发布时间】:2013-07-27 06:12:45
【问题描述】:
我正在开发一个开源科学库(用 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代码,老实说我想不出一个算法,把它变成代码来解决问题。我来自生物学背景,所以我对编码的算法思维方面没有太多经验。
有人对如何解决这个问题有任何建议吗?非常感谢您的帮助!
【问题讨论】:
-
看我的回答here。
标签: arrays multidimensional-array slice