4

C++ で要素ごとの積を実装することは難しくありません。

vector<float> a_array;
vector<float> b_array;
vector<float> c_array;
vector<float> dot_array;
....
for(int i=0; i<a_array.size(); i++)
{
   float temp;
   temp = a_array[i]*b_array[i]*c_array[i];
   dot_array[i] = temp;
}

これは非常に単純な実装であり、STL で既に利用可能なより効率的なアルゴリズムがあるかどうか疑問に思っています。ありがとう!

4

3 に答える 3

11

std::transform2 つのベクトルを乗算するために使用できます。

#include <algorithm>
#include <functional>

// Precondition: b.size() >= a.size() && r.size() >= a.size()
std::transform(a.begin(), a.end(), b.begin(), r.begin(), std::multiplies<float>());

2 つ以上の入力シーケンスを持つ同様の標準アルゴリズムはありません。

于 2012-07-31T10:35:51.973 に答える
7

std::inner_productを見てください。

編集質問が内積に関するものだったときに、この回答を投稿しました。要素ごとの積については、std::transformの 2 番目のバージョンを参照してください。

于 2012-07-31T10:24:06.107 に答える
0

std::vectorクラスは実際には数学的なベクトルではなく、動的なサイズの配列、コレクションです。あなたはおそらくその名前のために混乱しました。vectorを(誤って)使用する代わりに、数学的な操作を実装する実際のクラスを定義することをお勧めしstd::vectorます。

于 2012-07-31T10:24:54.983 に答える