私はオープン ソースの科学ライブラリ (C で記述) に取り組んでおり、サポートしたい操作の 1 つは、「プロデューサー」から多次元配列の任意のスライスを「コンシューマー」にコピーさせることです。たとえば、4x5 の 2D 配列があるとします (フォーマットについては申し訳ありません)。
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 カウント)
これは、0 の位置から始まる x 次元の場合は 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 コードであり、正直なところ、問題を解決するためにアルゴリズムを考えてコードに変換することはできません。私は生物学のバックグラウンドを持っているので、コーディングのアルゴリズム的な考え方についてはあまり経験がありません。
これを解決する方法について何か提案はありますか? 多くの助けをいただければ幸いです!