频段矩阵存储偏移
Band matrix storage offset
我试图了解如何存储频段矩阵,我在书中找到了一个示例," C 和面向对象的数字计算",但我无法弄清楚该行的目的是什么strong> bda [i] = p; ,这在尝试打印频段矩阵时也给我问题。在这里是:
int N = 5; //Matrix of NxN
int P = 1; //Left bandwidth
int R = 2; //Right bandwidth
//Matrix A
double A[5][5] = { { 1, 6, 10, 0, 0 },
{ 13, 2, 0, 11, 0 },
{ 0, 14, 3, 8, 12 },
{ 0, 0, 0, 4, 9 },
{ 0, 0, 0, 16, 5 } };
//Allocate memory for rows
double** bda = new double*[N];
for (int i = 0; i < N; i++) {
bda[i] = new double[P + R + 1]; //Allocate memory for cols
bda[i] += P; //What's the purpose of this?
}
这是一种紧凑的方法,用于存储主对角线左侧的 P
nonzero对角的矩阵,右侧为 R
nonzero对角,所有其他元素为零。对于每一行,我们仅分配主角周围的P+R+1
元素的空间。
bda[i] += P
线使bda[i]
指向主对角线上的元素。这可以使使用矩阵更加方便:bda[i][0]
在每个i
的主角上,bda[i][1]
在右侧的第一个对角线上,bda[i][-1]
在左侧的第一个对角线上等等。这使您可以在上面找到元素主角或附近无需每次添加P
。这是否有用取决于您如何使用矩阵。
请注意,如果您这样做,则需要在delete[]
之前从bda[i]
中减去P
。
相关文章:
- 如何避免在数据结构中包含存储为字段的类?
- 如何对存储为"Compressed Sparse Row"的矩阵进行稀疏矩阵索引?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- C++中特征对角矩阵类型的高效存储
- C++:将矩阵存储在一维数组中
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- 如何使用连接器 c++ 在 mySQL 表二进制(16) 字段中存储 c++ 字节数组?
- 如何将多个图像存储到多个矩阵中
- 处理特征中两种存储布局的固定大小矩阵的连续向量
- 将对象存储在C 中的2维Sprite矩阵中
- 为什么这段代码给出错误......'a'是指针到字符指针,应该存储's'的地址,因为s是指向数组的第一个元素的指针
- C ++读取TXT文件并将其存储在矩阵字符中
- 获取存储在矩阵中的图像 ROI 的平均 R、G 和 B
- 如何在C++中像函数一样存储参数矩阵
- 存储gl_triangles矩阵
- 什么是快速矩阵或二维数组,用于在C++中存储邻接矩阵
- 如何在C++中存储大矩阵
- 在C++(犰狳)中存储大矩阵
- 如何在元素填充过程中经济地存储稀疏矩阵
- 如何存储稀疏矩阵