线性代数-矩阵-【4】点乘 C和C++的实现

 点击这里可以跳转至

【1】矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html

【2】矩阵生成:http://www.cnblogs.com/HongYi-Liang/p/7275278.html

【3】矩阵加减:http://www.cnblogs.com/HongYi-Liang/p/7287403.html

【4】矩阵点乘:现在的位置

【5】矩阵化简:http://www.cnblogs.com/HongYi-Liang/p/7464850.html

...

 

C++语言:

原理解析:

矩阵乘法分为点乘和叉乘,其计算方法不同,本小结介绍点乘。A点乘B,是利用 A的每一行 乘以 B每一列得到新的一组值。

(此处补动图)

我们首先要有把一行或一列提取出来的成员函数:(请展开查看)

    bool getSpecifiedRow(int index,vector<T> *vec);      //获取第index行元素
    bool getSpecifiedColumn(int index,vector<T> *vec);//获取第index列元素

获取行:

View Code

 

获取列:

View Code

 

 

接下来开始进行点乘:

1、对于(MxN)A矩阵乘以 (NxJ)的B得到(M*J)的目标矩阵,要求A矩阵的列数要等于B矩阵的行数才能进行点乘,所以首先要做两个矩阵是否符合要求的判断。

2、对于3*3的矩阵:我们首先提取A矩阵的第一行分别和B矩阵第一二三列相乘 ,得到目标矩阵的第一行提取A矩阵的第二行,分别和B矩阵的第一二三列相乘,得到目标矩阵的第二行...

综上,点乘分为两步:

  • 判断两个矩阵的合法性;
  • 提取A矩阵的第k行,分别与B矩阵的第i列相乘,得到目标矩阵的第k行第i列;

以下两种写法都是上述思路

方法一

  • 合法性
  • 提取A矩阵的第一行,提取B矩阵的第一列,(它们长度一样);
  • A和B对应的元素分别相乘后相加,作为结果的第一个元素,如此类推重复23步;
View Code

 

 方法二(推荐)

  •   合法性
  •   从二维向量中找到对应的元素相乘后相加,作为结果的对应元素

  对于方法一,省略了提取行列的过程二,而通过直接操作二维向量(数组)的元素相乘后相加,更快、占用内存更低。

template <typename T>
Matrix<T> Matrix<T>::operator*(Matrix<T> &matrix)                    //运算符重载*重载为点乘
{
    /*matrix leagality check*/
    if(this->m_iColumns  !=  matrix.getRows())
    {
        cout<<"operator*():input ileagal"<<endl;
        return *this;
    }
    

    /*Caculate point multiply*/ Matrix<T> outputMatrix; vector<T> tempVec; T tempData; for(int j=0;j<m_iRows;j++) { for(int k=0;k<matrix.m_iColumns;k++) { tempData =0; for(int i=0;i<m_iColumns;i++) { tempData += this->m_vecMatrix[j][i] * matrix.m_vecMatrix[i][k]; } tempVec.push_back(tempData); } outputMatrix.addOneRowToBack(tempVec); tempVec.clear(); //clear for next rows adding  } return outputMatrix; }

 

 

 

C语言:

转载于:https://www.cnblogs.com/HongYi-Liang/p/7287324.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值