私のコードにバグがあり、エラーを認識できません。私は各変数の出力をステップごとに表示してデバッグしようとしましたが、エラーが見つかりません。ここで私が持っているものと私は何をしたいです:ベクトルとインデックスの内積にエラーがあります
私は行列Aがあります。
0000
0101
1010
1111
をそして、私は行列Bを持っている:
10000
21000
30100
41100
20010
21010
40110
41110
30001
41001
30101
41101
40011
41011
40111
41111
行列Bは、16行を持っており、 5 coloumns。行列Aは4行4列です。今度は、4行16列の行列Cを宣言します。
私がしたいのは、Bの各行の内積をAの対応する行で計算することです。対応するとは、Bの最初の列がAからの行を定義することを意味します。 B行列は実際には4次元ベクトルでもあり、最初の要素はAの行に対応しています。これはBの最初のcoloumnがAの行を選択するためのインデックスであると言うことができます。私のインデックスのために。
std::vector< std::vector<int> > C(4, std::vector<int>(16));
std::vector<int> index(4);
std::vector<int> vectorA(4);
std::vector<int> vectorB(4);
for(int y = 0; y < 16; y++)
{
for(int i=0; i<4; ++i){
vectorA[i] = A[ B[y][0]-1 ][i];
}
for(int x = 1; x < 4; x++)
{
vectorB[x -1] = B[y][x];
}
C[ B[y][0] -1][index[ B[y][0] -1] ] = inner_product(vectorA.begin(), vectorA.end(), vectorB.begin(), 0);
index[B[y][0]-1] += 1;
}
これは私の行列Cをもたらす:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
2 2 3 1 2 1 2 2 3 0 0 0 0 0 0 0
最初の2行が正しいが、3および4が偽である行ここに私のコードです。 正解は(多分3行目に発注し、4を除く)である必要があります:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0
4 3 3 2 3 2 3 2 2 0 0 0 0 0 0 0
どこに問題がありますか? 、それは狂気私を駆動:(私はステップで各変数を示すしようとしたが、それが偽の理由を見つけることができません助けてください
感謝と挨拶
ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
私はたくさんのことを学ばなければならず、過ごすでしょうこれでより多くの時間。私はあなたが何を意味しているのか理解しています。私のコードで何が間違っているかもしれないかのヒントを教えてもらえますか? C++を知っている人にとって、これは簡単な初心者の質問でしょうか? –
私はあなたのヒントを得ました:あなたのコードをより読みやすくするようにしてください。例えば、int indexFromB = B [y] [0]を書き、コメントを書くようにしてください。この混乱はすべて本当に読みにくいです。より具体的である - inner_product関数の結果は何ですか? – tty6