私はC++が初めてで、forループを使用して行列の列を1に正規化しようとしています。これは私の試みです:与えられた行列をC++で1になる行列に正規化する
#include <iostream>
#include <string>
int main() {
double A[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
double sum = 0;
int r = 3;
int c = 3;
for (int j=0; j < c; j++) {
for (int i=0; i < r; i++) {
sum += A[i][j];
}
for (int i=0; i < r; i++) {
A[i][j] /= sum;
}
}
for (int j=0; j < 3; j++) {
for (int i=0; i < 3; i++) {
std::cout<<A[i][j];
}
std::cout<<std::endl;
}
return 0;
}
そして、これが出力されます:
0.0833333 0.333333 0.583333
0.0740741 0.185185 0.296296
0.0666667 0.133333 0.2
私は出力がそのまま表示される理由はわからない、最初の列のために働いているようですが、ない残り。しかし、残りの2つの列は同じ比率で残ります。どのようにしてコードを修正して、目的のようにforループを使って行列を「正規化」できるのですか?
各列の値を合計し、列の各値をその値で除算する必要がある場合は、 'sum'の値が0から始まるので、最初に機能します。しかし、2番目の列に移動するとき、sumの既存の値、つまり、' sum'の代わりに最初の列の合計があります。次の列。だから、あなたの2番目のforループが終了すると 'A [i] [j]/= sum 'は' sum'に0の値を割り当てます。 –