2

推力ベクトルを拡張する特別な要件があります。キーのベクトル K と、値のベクトル V と、キー ベクトルに対応する拡張係数のベクトル E があるとします。特定のキーに対応する値を (拡張係数) 倍にコピーしたい。いくつかの Thrust::expand の例を見ましたが、私の特定の用途ではうまくいかないようです。結果の配列にスペースを割り当てるのは、thrust::reduce_by_key で簡単ですが、実際にベクトルを拡張する方法がわかりません。

例えば:

key is   [0,0,0,1,2,2,2,2,4]
value is [1,2,3,5,6,7,8,4,7]
key 0 has values [1,2,3] 
key 1 has value  [5]
key 2 has values [6,7,8,4]
key 4 has value  [7]
(This is not code but the website won't let me submit unless I indent these statements)

拡張係数配列:

Expansion factor: [2,3,1,1,3]
desired result array: [1,2,3,1,2,3,5,5,5,6,7,8,4,7,7,7]
1,2,3   are the values of key[0], expanded 2 times according to E[0]
5       is the value of key[1], expanded 3 times according to E[1]
6,7,8,4 are the values of key[2], expanded 1 times according to E[2]
[none]  is the value of key[3], expanded 1 times according to E[3]
7       is the value of key[4], expanded 3 times according to E[4]

これを行う効率的な方法はありますか?前もって感謝します。

4

1 に答える 1

2

元の投稿者は、この問題の解決策を次のように報告しています。

  1. 各キーの開始位置、各キーの要素数、および各キーの要素数 (展開後) の排他的結果の 3 つの補助配列を取得します。
  2. 排他スキャン結果配列のコピーを作成し、 を使用して展開しthrust::expandます。
  3. 展開された配列を介してカウント イテレータを使用します。それぞれの開始位置はkey[(iterator - exclusive scan result)%number of elements]、現在のイテレータの結果です。

このコミュニティ wiki エントリは、未回答リストから質問を取り除くためにコメントから追加されました。

于 2014-05-28T08:54:00.767 に答える