ポイント(x、y)を含む特定の配列の平均を計算しようとしています。
推力を使って平均点を(x、y)点として求めることは可能ですか? 平均値が平均セルを表しているとは確信していませんが、各セルにポイントの絶対位置が含まれている場合はi*numColumns + j
という意味で配列をthrust::device_vector<int>
として表すこともできます。
ありがとうございます!推力を使ってint2配列から平均を計算する方法
5
A
答えて
8
#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
struct add_int2 {
__device__
int2 operator()(const int2& a, const int2& b) const {
int2 r;
r.x = a.x + b.x;
r.y = a.y + b.y;
return r;
}
};
#define N 20
int main()
{
thrust::host_vector<int2> a(N);
for (unsigned i=0; i<N; ++i) {
a[i].x = i;
a[i].y = i+1;
}
thrust::device_vector<int2> b = a;
int2 init;
init.x = init.y = 0;
int2 ave = thrust::reduce(b.begin(), b.end(), init, add_int2());
ave.x /= N;
ave.y /= N;
std::cout << ave.x << " " << ave.y << std::endl;
return 0;
}
6
Kevemanの答えは、私は単にコードを必要とする有益なヒントを追加したい、正しいですので、私はコメントではなく、それをここにあげますよ。
Thrust 1.5では、ラムダプレースホルダが追加されているため、@ kevemanのアプローチはさらに簡単になります。ファンクタの代わりにint2
にoperator+
を定義し、ファンクタのインスタンス化を_1 + _2
ラムダプレースホルダ式に置き換えます。 init
の明示的宣言をmake_int2()
(CUDA提供)に置き換えることもできます。注:int2 operator+
は、CUDAコードサンプルSDKの "vector_math.h"ヘッダーで定義されていますが、そのファイルはCUDAの標準部分ではないため、明確にするために以下で定義します。
#include <iostream>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
using namespace thrust::placeholders;
__device__
int2 operator+(const int2& a, const int2& b) {
return make_int2(a.x+b.x, a.y+b.y);
}
#define N 20
int main()
{
thrust::host_vector<int2> a(N);
for (unsigned i=0; i<N; ++i) {
a[i].x = i;
a[i].y = i+1;
}
thrust::device_vector<int2> b = a;
int2 ave = thrust::reduce(b.begin(), b.end(), make_int2(0, 0), _1 + _2);
ave.x /= N;
ave.y /= N;
std::cout << ave.x << " " << ave.y << std::endl;
return 0;
}
関連する問題
- 1. 配列の平均を計算する
- 2. Mapreduce-java:配列リストの計算平均
- 3. cvMatの平均値を計算して使用する方法
- 4. python pandasを使って増分平均を計算する
- 5. 複数のファイルからawkを使って平均を計算する
- 6. 時系列データから年間平均を計算する方法
- 7. Ruby配列から四分位平均を計算しますか?
- 8. 辞書内の複数配列の配列平均を計算する
- 9. 複数のデータフレームにわたって平均を計算する
- 10. n行平均して配列に出力してから
- 11. パンダの行平均を計算する
- 12. 日付の平均を計算する
- 13. 合計の計算上の平均を
- 14. オラクル - 平均以上の利益を計算する方法
- 15. 同じキーでハッシュマップ値の平均を計算する方法
- 16. 別の方法で平均を計算するC++
- 17. Rのグループの平均を計算する方法
- 18. MySQLで複数の移動平均を計算する方法
- 19. Rubyの注入機能で平均を計算する方法
- 20. 平均海抜から上記の高度を計算する方法
- 21. perlを使用して平均を計算する
- 22. whileループを使用してPythonの平均を計算する
- 23. 計算平均速度
- 24. 平均を計算してスカラのリストから削除
- 25. GPSから移動平均速度を計算するには?
- 26. C#によるDataset Datatableの移動平均計算の計算方法は?
- 27. 行列からの要素ごとの平均を計算する
- 28. Propel ORM:列の平均を計算する
- 29. 文字列の平均文字を計算する
- 30. データフレーム内の2つの列の平均を計算する
がちょうど 'int2'タイプの加算演算子を定義計算できない(すなわち、 '+ B =' {a.x + BX、a.y +によって})、次いで標準を使用入力の総和を計算し、次に要素数で割りますか? – talonmies
Thrust 1.5 +のラムダプレースホルダを使用している場合は、演算子を使用できます(下記の私のアドオンの回答を参照してください)。 – harrism