我试图将一个向量乘以一个矩阵,但由于循环总是停在一行,所以我无法使它起作用。但是没有错误代码,我尝试了不同的方法将代码写入结果向量中,但是它不起作用。输出用于控制循环的停止位置,在res [i] + =(A [i] [k] * B [k])之后停止。
这是执行矢量和矩阵乘法的特定功能,如果需要所有代码,请告诉我。
void vector_matrix_multiplication(vector<vector<int>> A,vector<int> B, int col1, int row1, int row2, vector<int>& res) {
int row = row1;
if(row1 < row2)
row = row2;
for(int i = 0; i < row; i++) {
cout << "Loop 1 ";
cout << i << endl;
for (int k = 0; k < col1; k++) {
cout << "Loop 2 " << i << " " << k << endl;
res[i] += (A[i][k] * B[k]);
cout << "Loop 2?" << endl;
}
}
函数的输出(输入A = {{{2,3},{4,5}}&B = {1,2})是:
循环1 0
循环2 0 0
#include <iostream>
#include <vector>
using namespace std;
void vectorinput(vector<int>& a, int col){
cout << "Vector: " << endl;
for(int i = 0; i < col; i++) {
int x;
cin >> x;
a.push_back(x);
}
}
void matrixinput(vector<vector<int>>& a, int row, int col){
cout << "Matrix: " << endl;
for(int i = 0; i < row; i++) {
vector<int> vector;
for(int j = 0; j < col; j++) {
int x;
cin >> x;
vector.push_back(x);
}
a.push_back(vector);
}
}
int main(){
vector<int> vector;
vector<vector<int>> matrix; //Matrix is read in separate function
int row1 = 0; //Number of rows of first matrix
int col1 = 0; //Number of columns of first matrix
int row2 = 0; //Number of rows second matrix (redundant in this case)
int col2 = 0; //Number of columns second matrix
matrixinput(matrix1, row1, col1);
vectorinput(vector2, col2);
int row = row1; //Matrix with number of columns "col1", rows "row" - in this case both are 2
if(row2 > row1)
row = row2; //Vector with number of rows "row2" - in this case 2
vector<int> resvector(row, col1);
vector_matrix_multiplication(matrix2, vector1, col2, row, col1, resvector);
for(int i = 0; i < row; i++) {
cout << resvector[i] << endl;
}
return 0;
}
我希望这可以弄清楚程序和功能的目的。我尝试将其缩减一些,因为其中包含许多无用的代码。 (另外,我一开始很难输入代码,还不确定代码块的工作方式-抱歉^^)
答案 0 :(得分:0)
欢迎来到StackOverflow!我建议您将数学库用于此类工作。原因是:
如果您想构建自己的库用于学习,我建议您看看这些库的编写方式(它们是开源的)
答案 1 :(得分:0)
您的代码中存在以下三个错误:
由于您使用了std::vector
explicit vector(size_type count, const T& value = T(), const Allocator& alloc = Allocator());
,resvector
的第二个参数必须为零。
row1
,row2
,col1
和col2
在主函数中全为零,因此vector_matrix_multiplication
中的循环不起作用。
我们还可以将这些变量减少为@ n.m到矩阵的row
和col
。在评论中提出建议。
matrix1
,matrix2
,vector1
和vector2
未定义。
总而言之,以下最低限度固定的版本将很适合您:
int main()
{
std::vector<int> vec;
std::vector<std::vector<int>> mat;
int row = 2; //Number of rows of matrix
int col = 2; //Number of columns of matrix
matrixinput(mat, row, col);
vectorinput(vec, col);
std::vector<int> resvector(row, 0);
// 5th argument is redundant as @n.m. suggested
vector_matrix_multiplication(mat, vec, col, row, col, resvector);
for(int i = 0; i < row; i++) {
std::cout << resvector[i] << std::endl;
}
return 0;
}