1

matlabでは、次のようにmatlab演算子を使用できます。

M=[1 2 3 4, 5 6 7 8, 9 10 11 12]
M[:,1] = M[:,2] + M[:,3]

std::vector行列のすべての行に同じ操作を適用するにはcolon(:) matlabの演算子を使用して行うのと同じ操作を適用して、値の範囲に値を設定できるかどうか疑問に思っています。確かに、私は行列値を格納するためにベクトルを使用しています。

vector<int> M;

前もって感謝します。

4

2 に答える 2

2

matlabとほぼ同じように行列を処理できるC++ライブラリがあります(SIMDベクトル化も可能です)。たとえば、 eigenを検討することをお勧めします。

外部ライブラリに依存したくない場合はstd::valarray、代数計算で明示的に考えられているものを検討することをお勧めします(valarraysを使用std::slicesすると、必要に応じて部分行列を抽出できます)。

于 2012-10-30T07:28:40.837 に答える
0

std::vector<int>パラメータとして受け取る「フリー」オペレータを定義できます。

std::vector<int> operator +(const std::vector<int> &a, const std::vector<int> &b)
{
    std::vector<int> result(a); // Copy the 'a' operand.

    // The usual matrix addition is defined for two matrices of the same dimensions.
    if (a.size() == b.size())
    {
        // The sum of two matrices a and a, is computed by adding corresponding elements.
        for (std::vector<int>::size_type i = 0; i < b.size(); ++b)
            // Add the values of the 'b' operand.
            result[i] += b[i];

        return result;
    }
}

int main(int argc, char **argv)
{
    std::vector<int> a;
    std::vector<int> b;

    // The copy constructor takes care of the assignement.
    std::vector<int> c(a + b);

    return 0;
}

の実装operator +は非常に素朴ですが、単なるアイデアです。注意してください!、追加操作の前にチェックを配置しました。チェックが渡されない場合、aオペランドのコピーが返されます。これはあなたの望ましい動作ではないと思います。

の同じファイルに演算子を配置しましたmainが、操作が実行される場所が見える限り、好きな場所に配置できます。

もちろん、操作を連鎖させてより複雑な操作を実現するために必要な演算子を定義できます。

私の数学の概念はかなり古いですが、お役に立てば幸いです。

于 2012-10-30T07:08:32.987 に答える