在C ++中乘以2D数组

时间:2014-12-19 07:19:34

标签: c++ arrays

我重载了运算符*,它乘以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];

你有什么线索吗?你可以给我写一些想法,我怎么能自己弄明白,因为我想了解它。感谢

1 个答案:

答案 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];