gpt4 book ai didi

c++ - 将给定矩阵规范化为 C++ 中列项总和为 1 的矩阵

转载 作者:行者123 更新时间:2023-11-28 04:55:49 25 4
gpt4 key购买 nike

我是 C++ 的新手,我正在尝试使用 for 循环将矩阵的列归一化为总和。这是我的尝试:

#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

我不确定为什么输出按原样显示,似乎它适用于第一列,但不适用于其余列。然而,其余两列保持相同的比例。如何修改代码,以便我可以按预期使用 for 循环“规范化”我的矩阵?

最佳答案

细胞核,

您的代码就快完成了。您忘记考虑的一件事是,变量 sum 随着时间的推移继续对整个矩阵中存在的值求和,而不仅仅是 的值>

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 循环的第一次迭代,即对于第一列,由于 sum 为零,它最终得到该列值的正确总和,然后通过除法对其进行归一化与值的总和。

但是,在下一次循环遍历第 2 列时,sum 的先前值仍然存在,因此必须在循环结束时再次将其分配给 0获得 column 2 的新的正确总和,否则您在此阶段有 sum=sum(column1)+sum(column2)

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;
}
sum = 0;
}

关于c++ - 将给定矩阵规范化为 C++ 中列项总和为 1 的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47149009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com