C++ 如何将两个压缩矩阵相乘?

C++ 如何将两个压缩矩阵相乘?,c++,matrix,vector,compression,C++,Matrix,Vector,Compression,目标是将任意大小的两个平方(nxn)矩阵相乘。然而,为了节省空间,矩阵被压缩成上三角形式,并且矩阵中的零被忽略 上三角形表示主对角线下方的所有条目均为零 例如,三维矩阵可能如下所示: 这可以解释为这些向量之间的乘法 我已经开始了我的实现——但它变得非常混乱,我想知道是否有一种更简单的方法来实现这一点,并且与我的数据格式保持一致 The data: matrixA = 2d vector that contains the row elements of matrixA matrixB = 2

目标是将任意大小的两个平方(nxn)矩阵相乘。然而,为了节省空间,矩阵被压缩成上三角形式,并且矩阵中的零被忽略

上三角形表示主对角线下方的所有条目均为零

例如,三维矩阵可能如下所示:

这可以解释为这些向量之间的乘法

我已经开始了我的实现——但它变得非常混乱,我想知道是否有一种更简单的方法来实现这一点,并且与我的数据格式保持一致

The data:
matrixA = 2d vector that contains the row elements of matrixA
matrixB = 2d vector that contains the col elements of matrixB

The goal:
return matrixC = matrixA * matrixB


vector <int> multiplyVectors(vector <vector<int>>* matrixA, vector <vector<int>>* matrixB)
{
    vector<int> results;
    long int summation = 0;
    int matrixA_size = (*matrixA).size();
    int square = matrixB_size;

    int currentRow = 0; 
    int currentRowInner = 0;
    int currentColumn = 0; 
    int currentColumnInner = 0;

    int doItAmount = 1;
    // multiply each column for every row
    while (currentRow <= matrixB_size)
    {
        for (int i = 0; i < matrixA_size; i++)
        {
            for (int i = 0; i < matrixA_size; i++)
            {

            ...


}}}}
数据:
matrixA=包含matrixA行元素的2d向量
matrixB=包含matrixB的col元素的2d向量
目标是:
返回矩阵xc=matrixA*matrixB
向量乘向量(向量*matrixA,向量*matrixB)
{
矢量结果;
长整数和=0;
int matrixA_size=(*matrixA).size();
int square=矩阵x_大小;
int currentRow=0;
int currentRowInner=0;
int currentColumn=0;
int currentColumnInner=0;
int doItAmount=1;
//每行乘以每列

而(currentRow两个上三角矩阵的乘积也是一个上三角矩阵。因此,您只需计算这些项。每个结果项的乘积之和在中心对角线上只有一个乘积(即被乘数对角线的乘积),下一个对角线向上的两个乘积,依此类推到单个右上项的n个乘积,其中您将n x n矩阵相乘


因此,只需编写外循环和内循环,即可计算出适当的项数,并对结果中的每个项数求和,这样就不会浪费时间相乘和加零。这将大大减少正常矩阵乘法中从n2和n3到n(n-1)/2和n的加法和乘法次数(n+1)(n+2)/6表示上对角线矩阵的乘积。对于较大的n,这会将工作量减少六倍。

目标是将矩阵相乘,但要将向量相乘?互换使用不同的术语会有点混淆。1.“但是,矩阵在rref()中压缩。”,并忽略矩阵中的零以节省空间。“什么是
rref()
?2.三维矩阵与问题的具体内容相关吗?如果不相关,那么这句话会令人困惑,因为三维矩阵乘法没有标准定义,这会让人感到困惑。3.函数的特征是它接受两个二维矩阵,并返回一个向量…即n标准矩阵乘法或标准向量乘法都有什么作用。你能说明你想做什么吗?我已经添加了一些说明。你的目标是返回一个矩阵,但你的函数示例返回一个向量。你想做什么?返回的向量是从左到右读取的结果矩阵。