gpt4 book ai didi

C++:Matrix的转置,使用SINGLE DIMENSION动态数组保存元素

转载 作者:行者123 更新时间:2023-11-28 01:14:31 24 4
gpt4 key购买 nike

亲爱的 friend 们,我在转置矩阵时遇到问题。转置矩阵具有未定义的元素。不知道哪里出了问题。感谢您的宝贵时间!

entries[i] 是存储矩阵中元素的动态数组。元素从左到右逐行存储。即在 3X3 矩阵中,entries[2] 是第 1 行的第 3 个元素,entries[3] 是第 2 行的第 1 个元素

n是矩阵的行数

m是矩阵的列数

Matrix Matrix::Transpose() const {
double* temp;
temp = new double[n * m];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
temp[(j - 1) * m + i - 1] = entries[(i - 1) * m + j - 1];
}
Matrix Result(m, n, temp);
delete temp;
return Result;
}

当原始矩阵为正方形时,转置矩阵的所有元素均已定义。当原始矩阵为 1x3 时,生成的转置 3x1 矩阵的第二个和第三个元素具有未定义的元素。 IE。 (1 1 3) 转置后返回 (1 -3452346326236 -12351251515)

矩阵打印功能如下。错误也可能来自这里。

void Matrix::Print() const
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
cout << setw(13) << entries[(i - 1) * m + j - 1];
cout << endl;
}
}

最佳答案

当矩阵不是正方形时,直线

temp[(j - 1) * m + i - 1] = entries[(i - 1) * m + j - 1];

是不对的。它必须是:

temp[(j - 1) * n + i - 1] = entries[(i - 1) * m + j - 1];
// ^^ needs to be n, not m.

想想二维模拟。你想使用:

temp[j][i] = entries[i][j];

entries 是一个n x m 矩阵。对于它,二维索引 [i][j] 被翻译成一维索引的 [i*m + j]

temp 是一个 m x n 矩阵。对于它,二维索引 [j][i] 被翻译成一维索引的 [j*n + i]

提高可读性的建议

使用 num_rowsnum_columns 代替 nm。您会发现您的代码更具可读性。

关于C++:Matrix的转置,使用SINGLE DIMENSION动态数组保存元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59132745/

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