c++ - 矩阵相乘算法的问题(c++)

标签 c++ arrays matrix

您好,我正在帮助我的一个 friend 编写一个程序,该程序可以在不展开矩阵的情况下将两个上三角矩阵相乘。当我说不扩展矩阵时,我的意思是不用零填充上三角矩阵的下部(目标是节省空间)。我正在从一个文件中读取矩阵,该文件仅具有矩阵的上三角值,而下部被省略。

我想要完成的是编写一个函数,给定一个数组和一对索引,将返回一个扩展矩阵在该位置将具有的元素(0 表示对角线以下,值高于对角线).我正在考虑使用通常的矩阵乘法算法,该算法在需要访问元素时使用此函数。我已经为此工作了几个小时,但我无法想出一种方法将双矩阵索引 (i,j)(i 沿着行)转换为单个数组索引,反之亦然(提醒我' m 使用一维数组存储上三角矩阵)。任何帮助将不胜感激!

最佳答案

// mat is an array containing the upper triangle data for a square matrix of size n
// returns element at (i,j), or 0 for the lower triangle
int getFromTriangle(const int* mat, int n, int i, int j)
{
  if (i > j) {
    return 0; // lower triangle
  } else {
    return mat[j + (i*n) - i*(i+1)/2];
  }
}

if 子句处理下三角。 else 子句像这样计算数组索引:

j + (i*n) - i*(i+1)/2

这只是常规矩形矩阵索引函数减去正好是第 i triangular number 的偏移量,因为在任何行 i 中,存储都省略了 triangle(i) 元素。

关于c++ - 矩阵相乘算法的问题(c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26333024/

相关文章:

C++11 将 shared_ptr 转换为 vector 和类

c - 定义 2 个字节以便于在 C 中使用数组初始化/比较的最佳方法?

matlab - 在Matlab中只计算矩阵乘积的对角线

r - 矩阵的每一行与另一个矩阵的相应行的叉积

c++ - 为 std::reference_wrapper 赋值

c++ - C++中的默认参数

c++ - 通过第一个元素推断初始值设定项列表的类型

c++ - 来自视频文件的垫子数组 - opencv

java - 断言等于将字符串和数组列表与 Excel 中的文本数据进行比较

c++ - 如何定义矩阵-矩阵乘法,使其也适用于 vectorXvector、vectorXmatrix 和 matrixXvector?