c++ - 尝试在 C++ 中将两个动态创建的矩阵(2d vector )相乘

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

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

我来自 Java、Python 和 C#,所以我几乎在学习 C++。

我有生成 vector 和显示 vector 的代码,但我似乎无法完成乘法部分。

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 个。

最佳答案

当你multiply matrices , 左边矩阵的列数必须等于右边矩阵的行数。您需要检查这是否属实,并使用该公共(public)数字作为您的 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];
        }
    }
}

关于c++ - 尝试在 C++ 中将两个动态创建的矩阵(2d vector )相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19053115/

相关文章:

python - Python中的递归循环函数

c++ - Fortran、ISO C 绑定(bind)和 std::string

javascript - setValues 不迭代数组

c++ - 在 C++ 类中使用位域的未对齐属性

loops - 电源查询循环

c++ - 您将如何根据元素的某些属性删除 std::vector 的元素?

c++ - 如何找到 vector 中重复的元素

c++ - 使用模板函数打印智能指针 vector

c++ - 以下是否表明设计不好?

c++ - 为什么不能在指针对象上调用函数?