我重载了运算符*,它乘以2D数组。我在乘法方面遇到了一些问题,当我乘法时,我并不完全理解索引。
以下是一些声明:
int *const e; //pointer to the memory storing all integer elements of A
const int row, column; //r and c are the numbers of rows and columns respectively
还有一些代码:
A A::operator*(const A& matrix)const
{
MAT result(matrix.row, matrix.column);
if (column == matrix.row)
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < matrix.column; j++)
{
result.e[j*row + i] = 0;
for (int k = 0; k < column; k++)
{
result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + column];
}
}
}
}
return result;
}
我知道我需要3个循环,我认为我有一些问题
result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + column];
你有什么线索吗?你可以给我写一些想法,我怎么能自己弄明白,因为我想了解它。感谢
答案 0 :(得分:2)
你的行
result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + column];
坏了。两个矩阵A(dim M,N)和B(dim N,P)的乘积P使其位置(i,j)的系数由以下定义:
P i,j = sum(k = 1..N,a i,k .b k,j )。< / p>
因此上述行应为:
result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + i];