2016-10-21 8 views
0

こんにちは私はC++を初めて使っていて、Matlabでやりやすいことをしようとしています。私はベクトルを計算するforループを持っています。このベクトルを格納してループ外にアクセスできるようにしたいと思います。ループ中にC++ストアの配列を配列に入れよう

for(ii=0; ii < numObs; ii++} { 
    someVector = ... 
    someMatrix[ii][:] = someVector 
} 

someMatrix [ii] [:]はもちろん動作しませんが、それは私がしたいことです。どんな助けもありがとう!ありがとう!

説明:someVectorは、ループ内で毎回計算される1xn要素ベクトルです。私はsomeMatrix [ii]を呼び出してベクトルを戻すことができるように、単に行列または配列のいずれかに格納したいと思います。あなたは、おそらくのようなものを探している

+0

ベクトルは行列と同じものではありません。 'matrix'や' vector'の実装を使うかどうかを明確にしてください。 – George

+0

FYI、私はEigenを調べることをお勧めします。優れた線形代数ライブラリは、Matlabユーザーにとって使いやすいものです。 –

+1

[Armadillo C++ライブラリ](http://arma.sourceforge.net)もご覧ください。このライブラリには、[意図的に類似した](http://arma.sourceforge.net/docs.html#syntax)という構文があります。 Matlab。 – mtall

答えて

1

:ここで欠点の

std::vector<std::vector<double>> matrix; // matrix - vector of vectors 
for(int i = 0; i < numObs; ++i) { 
    std::vector<double> vec = ... // your calculations go here 
    // if no C++11 - don't use std::move 
    matrix.push_back(std::move(vec)); 
} 

一つは、各vectorは同じ数の要素(上記のコードにはない持っていることを計算コードで保証しなければならないということですそれを確認する)。

これは明らかに行列を処理する最適な方法ではないことを覚えておいてください。専用のライブラリ(画像処理のためのboost :: numeric、OpenCV、Armadilloまたはその他のもの)あなたがそれについて深刻な計算をしたいならば。

+0

'emplace_back'はこの例で違いはありません。 vecはすでに作成されています。 – Dam

+0

@Dam私の悪い、それは 'std :: move'(アイデアはコピーを避けることだった)とされていました。通知ありがとう –

関連する問題