gpt4 book ai didi

c++ - 在 C++ 中重新排序矩阵乘法的索引

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:38 24 4
gpt4 key购买 nike

const int n=50;
double a[n][n];
double b[n][n];
double c[n][n];

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
cout << c[i][j] << " ";
}
cout << "\n";

我目前有一个工作代码可以将两个 nxn 矩阵相乘。我正在尝试重新排序索引(即 i、k、j ... k、i、j)而不触及执行乘法的方程式。我这样做是为了了解索引的顺序如何影响性能时间,但如果我只是在我的循环中将“j”更改为“k”,反之亦然,我的乘法方程式将不正确。我想知道我尝试做的事情是否可行,是否有人可以阐明我可以采取哪些步骤来实现这一目标。

最佳答案

首先,您不应该在执行此操作时打印出 c 矩阵,尤其是在尝试对算法计时时。你应该做的是更类似于此:

const int n=50;
double a[n][n];
double b[n][n];
double c[n][n];

/* First multiply the matrices a,b into c. */
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}

/* now print out the result for visual correctness check */
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
std::cout << c[i][j] << ' '; //this will leave a space after last character, but for this use case, nobody cares.
}
std::cout << std::endl;
}

然后您可以切换包含 for 循环(即 for (int i = 0; i < n; i++))的行,看看更改访问模式是否会更改执行时间/结果。

剧透:它不应该影响结果,除非在矩阵内部出现奇怪值的某些边界情况,这是由 float 学的不精确引起的。然而,它应该会影响执行时间,但除非正确测量,否则它将被打印矩阵所花费的时间所支配。

关于c++ - 在 C++ 中重新排序矩阵乘法的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815746/

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