uBLAS (Mathematica の Map[] など) のベクトルのすべての要素に関数をマップするにはどうすればよいですか?
例えば; sin()
uBLAS ベクターのすべての要素を取得したいと考えています。ベクトルの要素を単純にループする代わりに、Boost、GSL、またはその他の数値ライブラリでこれを行う最適化された方法はありますか?
また、回転、重複の削除、ゼロでのパディングなど、uBLAS ベクトルで他の高度な操作を実行するにはどうすればよいですか?
あなたのベクトル(これによると)は通常のベクトル操作をサポートしています。標準のアルゴリズムを使用するだけです。あなたの場合、ここにいくつかのヘルプがあります(すべて内部<algorithm>
):
std::transform
しますsinef
<cmath>
std::rotate
。std::unique
削除し、並べ替え後に使用し、使用されていない要素を削除します。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()
)