基本的にはmatlabコマンドをコピーする関数を作成しようとしています:[z;-z]
z = randn(m,n)
m-ランダムエントリーの行列。私は以下の通りです関数randnのためにC++で関数を作成することができました:Matlab演算[z; z]を実行する関数をC++で作成すると、zは行列またはベクトルです
MatrixXd generateGaussianNoise(int n, int m){
MatrixXd M(n,m);
normal_distribution<double> nd(0.0, 1.0);
random_device rd;
mt19937 gen(rd());
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
M(i,j) = nd(gen);
}
}
return M;
}
今私は[z;-z]
関数を作成する必要があります。例えば、出力がされるのは、z = randn(2,2)
を言わせて:
-2.2588 0.3188
0.8622 -1.3077
を今、私は[z;-z]
を書くときに我々が得る:
-2.2588 0.3188
0.8622 -1.3077
2.2588 -0.3188
-0.8622 1.3077
私は行列またはベクトルz
店で撮影した関数を作成されて考えていますそれらのエントリを別の行列またはベクトルに格納し、次に、サイズが2倍になった新しい行列またはベクトルを作成して、関連するエントリを正しい(i,j)
の位置に配置します。
これがどうすればいいのかわかりません。ご意見やご提案をいただければ幸いです。補足として、私はまだC++の初心者です。
コードは私の答えと同じようです。連結なしで直接出力を計算するので、答えに収まらない。元の投稿のコードは、自分自身に連結するときに使用してください。 – anatolyg
@anatolygおっと、その1行を削除するのを忘れてしまった。完全な例としてデータを取り込むために単純に借用しました。今更新されました – Suever
2番目の部分(行列を垂直に連結)とちょっと混乱していますが、なぜ列が2倍になっていて列が正しくないのですか?私の例では、2行2列の行列は4行4列になるので、行と列の両方が2倍になると思われます。 – Scooby