c++ - 在 C++ 中按列保存矩阵

标签 c++ matrix

<分区>

我试图理解这段代码,但我不能: n x n 矩阵按列保存。我区分完整 (F)、上 (U) 和下 (L) 矩阵。 n是矩阵的维数

int sum(int k){
int s = 0;
for (int i = 1; i<=k; i++)
    s += i;
return s;}


double getentry(int j, int k){
    j--;k--;

    assert(typ == 'F' || typ == 'U' || typ == 'L');
    assert(k<n && j<n);

    if(typ == 'F') return mat[k*n+j];
    if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]);  
    if(typ == 'U') return (j>k)?(0.0):( mat[k*n+j-sum(n-1)+sum(n-(k+1))]);
}

我特别不明白这一行:

if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]);  
    if(typ == 'U') return (j>k)?(0.0):( mat[k*n+j-sum(n-1)+sum(n-(k+1))]);

但如果您也能解释一下这一行,我将不胜感激:

if(typ == 'F') return mat[k*n+j];

最佳答案

线条

   if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]);  
        if(typ == 'U') return (j>k)?(0.0):( mat[k*n+j-sum(n-1)+sum(n-(k+1))]);

标志的使用packed storage schem存储您的矩阵。

另请注意,恕我直言,整体代码质量非常低,例如,无需使用 for 循环 计算 sum(k),其显式表达式为 ( k+1)*k/2等

关于c++ - 在 C++ 中按列保存矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47911611/

相关文章:

c++ - 从整数 vector 的 vector 中搜索整数 vector 的最佳算法

c++ - 由于 LLVM 错误,Xcode 无法编译

r - 创建一个图来显示值是否匹配

Android:调整图像一部分的大小和缩放

c++ - 选择锁粒度

c++ - 将两个 uint16_t 数字相乘得到一个 int

c++ - 如何配置VC++ devenv.com命令行的Include/Lib目录?

python - 替换所有高于阈值的 RGB 值

python - 3d 内核和 3d 图像(例如 RGB)的矩阵乘法到底是如何产生 2d 输出的?

c - 我们如何在网格中找到两条权重最大的路线?