使用数组的矩阵乘法给我错误的答案
matrix multiplication using arrays gives me wrong answer
我正在尝试将 3x4 和 4x2 矩阵相乘,然后将 3x2 矩阵输出到屏幕。出于某种原因,我弄错了最后一行,但前两行是正确的。
我试过改变我的条件
int result[6];
int rows=3;
int columns = 2;
int mvalue=4;
但还是答错了
mvalue
应该是矩阵大小的中间值,在这种情况下为 4 (3x4 × 4x2).
void multiMatrix(int matrix1[], int matrix2[], int result[], int rows, int columns, int mvalue){
for(int i=0; i<rows; i++){
for(int j=0; j<columns; j++){
result[i*columns+j]=0;
for(int w=0; w<mvalue; w++){
result[i*columns+j]= result[i*columns+j]+matrix1[i*columns+w]*matrix2[w*columns+j];
}
}
}
}
#include <iostream>
int main(){
int matrix1[]={1,2,3,4,
1,2,3,4,
5,4,5,3};
int matrix2[]={1,2,
3,4,
1,2,
3,4};
int result[6];
int rows=3;
int columns = 2;
int mvalue=4;
multiMatrix(matrix1, matrix2, result, rows, columns, mvalue);
for(int i=0; i<rows; i++){
for(int j=0; j<columns; j++){
std::cout<<result[i*rows+j]<<" ";
}
std::cout << std::endl;
}
}
输出应该是:
22 32
22 32
31 48
我得到的实际输出是:
22 32
22 32
1 2
您通过 something * columns + something
索引了 matrix1 和 matrix2
这不可能是对的,因为matrix1和matrix2的形状不同。在一种情况下乘以 4,在另一种情况下乘以 2。
我会让你从那里调试。
计算线应该是这样的:
result[i*columns+j] += matrix1[i*mvalue+w]*matrix2[w*columns+j];
此外,当您打印出值时,您应该打印出
cout<<result[i*columns+j]<<" ";
而不是
cout<<result[i*rows+j]<<" "; // i * rows is squaring itself
我正在尝试将 3x4 和 4x2 矩阵相乘,然后将 3x2 矩阵输出到屏幕。出于某种原因,我弄错了最后一行,但前两行是正确的。
我试过改变我的条件
int result[6];
int rows=3;
int columns = 2;
int mvalue=4;
但还是答错了
mvalue
应该是矩阵大小的中间值,在这种情况下为 4 (3x4 × 4x2).
void multiMatrix(int matrix1[], int matrix2[], int result[], int rows, int columns, int mvalue){
for(int i=0; i<rows; i++){
for(int j=0; j<columns; j++){
result[i*columns+j]=0;
for(int w=0; w<mvalue; w++){
result[i*columns+j]= result[i*columns+j]+matrix1[i*columns+w]*matrix2[w*columns+j];
}
}
}
}
#include <iostream>
int main(){
int matrix1[]={1,2,3,4,
1,2,3,4,
5,4,5,3};
int matrix2[]={1,2,
3,4,
1,2,
3,4};
int result[6];
int rows=3;
int columns = 2;
int mvalue=4;
multiMatrix(matrix1, matrix2, result, rows, columns, mvalue);
for(int i=0; i<rows; i++){
for(int j=0; j<columns; j++){
std::cout<<result[i*rows+j]<<" ";
}
std::cout << std::endl;
}
}
输出应该是:
22 32
22 32
31 48
我得到的实际输出是:
22 32
22 32
1 2
您通过 something * columns + something
这不可能是对的,因为matrix1和matrix2的形状不同。在一种情况下乘以 4,在另一种情况下乘以 2。
我会让你从那里调试。
计算线应该是这样的:
result[i*columns+j] += matrix1[i*mvalue+w]*matrix2[w*columns+j];
此外,当您打印出值时,您应该打印出
cout<<result[i*columns+j]<<" ";
而不是
cout<<result[i*rows+j]<<" "; // i * rows is squaring itself