所以我要做的是将一个2d矢量乘以另一个2d矢量。
我来自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);
我对我出错的地方的猜测是在最里面的循环中。我现在无法弄清楚实际应该用什么代替那里的那个。
答案 0 :(得分:1)
对于你的内循环,你应该做这样的事情
ans[i][j] = 0;
for (int k = 0; k < n2; k++) {
ans[i][j] += v1[i][k] * v2[k][j];
}
我不知道10
来自哪里。
答案 1 :(得分:1)
当你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];
}
}
}