2

uBLAS (Mathematica の Map[] など) のベクトルのすべての要素に関数をマップするにはどうすればよいですか?

例えば; sin()uBLAS ベクターのすべての要素を取得したいと考えています。ベクトルの要素を単純にループする代わりに、Boost、GSL、またはその他の数値ライブラリでこれを行う最適化された方法はありますか?

また、回転、重複の削除、ゼロでのパディングなど、uBLAS ベクトルで他の高度な操作を実行するにはどうすればよいですか?

4

2 に答える 2

1

あなたのベクトル(これによるとは通常のベクトル操作をサポートしています。標準のアルゴリズムを使用するだけです。あなたの場合、ここにいくつかのヘルプがあります(すべて内部<algorithm>):

  • 正弦演算の場合、 fromとともに使用std::transformしますsinef<cmath>
  • 回転については、(角回転ではなく、ベクトル回転を想定しています)std::rotate
  • 重複をstd::unique削除し、並べ替え後に使用し、使用されていない要素を削除します。
  • ゼロでパディングすることは、より多くの出力操作です-ベクトルでは実行しません
于 2011-08-15T10:24:14.570 に答える
1

map に最も近いものはstd::transform

#include <algorithm>
#include <functional>
#include <vector>
#include <cmath>

int main() {
   std::vector<float> values;
   values.push_back(0.5f);
   values.push_back(1.0f);
   std::transform(values.begin(), values.end(), values.begin(), std::ptr_fun(sinf));
}

重複除外の場合:

#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>

int main() {
   std::vector<int> duplicates;
   duplicates.push_back(1);
   duplicates.push_back(3);
   duplicates.push_back(5);
   duplicates.push_back(1);
   std::sort(duplicates.begin(), duplicates.end());
   duplicates.erase(std::unique(duplicates.begin(), duplicates.end()), duplicates.end());
   std::copy(duplicates.begin(), duplicates.end(), std::ostream_iterator<int>(std::cout, "\n"));
}

(私は ublas ベクトルが持っていると信じていbegin()ますend())

于 2011-08-15T10:13:48.363 に答える