线性代数-矩阵-转置 C和C++的实现

原理解析:

本节介绍矩阵的转置。矩阵的转置即将矩阵的行和列元素调换,即原来第二行第一列(用C21表示,后同)与第一行第二列(C12)元素调换位置,原来c31与C13调换。即cij与cji调换 。

(此处补图说明)

C++语言:

首先我们想到的是把第i行第j列取出来与第j行第i列调换,这种思路很简单就不多说了。

这里提供另一个思路,对整行整列进行操作,方法如下:

  1. 使用getSpecifiedRow()把本矩阵中的第i行取出来放在向量tempVec中;
  2. 使用 addOneColumToBack()把上述取出来的tempVec放入临时矩阵tempMatrix的列中;
  3. 用临时tempMatrix取代本矩阵;
template <typename T>
Matrix<T> Matrix<T>::transpose()
{
    Matrix<T> tempMatrix;
    vector<T> tempVec;

    /*get transpose*/
    for(int i=0;i<m_iColumns;i++)
    {
        this->getSpecifiedRow(i,&tempVec);
        tempMatrix.addOneColumToBack(tempVec);
    }

    /*swap rows and columns*/
    m_vecMatrix = tempMatrix.m_vecMatrix;
    int temp = m_iColumns;
    m_iColumns = m_iRows;
    m_iRows = temp;

    return tempMatrix;
}

 

posted @ 2017-08-04 22:43  HongYi_Liang  阅读(706)  评论(0编辑  收藏  举报