【问题标题】:Trying to multiply two dynamically created matrices(2d vector's) together in c++试图在 C++ 中将两个动态创建的矩阵(二维向量)相乘
【发布时间】:2013-10-03 21:21:34
【问题描述】:

所以我要做的是将一个二维向量乘以另一个二维向量。

我来自 Java、Python 和 C#,所以我在学习 C++ 的过程中几乎都在学习。

我已经编写了生成向量并显示向量的代码,但我似乎无法完成乘法部分。

v1 是另一个已经生成的矩阵。

vector<vector<int> > v2 = getVector();

int n1 = v1[0].size();
int n2 = v2.size();

vector<int> a1(n2, 0);
vector<vector<int> > ans(n1, a1);

for (int i = 0; i < n1; i++) {
    for (int j = 0; j < n2; j++) {
        for (int k = 0; k < 10; k++) {
            // same as z[i][j] = z[i][j] + x[i][k] * y[k][j];
            ans[i][j] += v1[i][k] * v2[k][j];
        }
    }
}

displayVector(ans);

我对哪里出错的猜测是在最内层循环中。我不知道用什么来代替我现在拥有的那 10 个。

【问题讨论】:

  • 对于矩阵 mult v1.size() 必须等于 v2[0].size()。该数字(两个矩阵相同)替换了 k 的 10。

标签: c++ loops vector matrix-multiplication 2d-vector


【解决方案1】:

对于你的内部循环,你应该做这样的事情

            ans[i][j] = 0;
            for (int k = 0; k < n2; k++) {               
                ans[i][j] += v1[i][k] * v2[k][j];
            }

我不知道10 来自哪里。

【讨论】:

  • 我现在只是把 10 作为占位符放在那里。
【解决方案2】:

multiply matrices时,左侧矩阵的列数必须等于右侧矩阵的行数。您需要检查这是否属实,并将该常用数字用于您的 k 变量的大小:

int nCommon = v1.size();
assert(v2[0].size() == nCommon);
for (int i = 0; i < n1; i++) {
    for (int j = 0; j < n2; j++) {
        for (int k = 0; k < nCommon ; k++) {
            ans[i][j] += v1[i][k] * v2[k][j];
        }
    }
}

【讨论】:

  • 谢谢!我只是对那部分感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
相关资源
最近更新 更多