c – 如何处理9维矩阵的索引
我是一名物理学家,目前正在编写一个处理多维集成的C程序;特别是,我正在考虑的功能可以达到D = 9维度.
从数学角度来看,我需要处理NxNxN … xN(D次)矩阵,但从编程的角度来看,我被指示使用NxNxN … xN元素的数组.据我所知,为了通用性和所有随后的涉及指针的计算,数组更好. 但是,现在我遇到了一个我无法解决的问题. 我需要执行一些计算,其中我的矩阵的单个索引是固定的,而所有其他索引都采用所有不同的值. 如果它是3x3x3矩阵,代码将类似于以下内容: double test[3][3][3]; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { test[0][i][j]=i*j; } } 即我可以修复索引并循环浏览其他索引. 如何通过双重测试[3 * 3 * 3]实现相同的效果?请记住,三维矩阵只是一个例子;我正在处理的真实矩阵是9维的,所以我需要一种通用的方法来保持我的矩阵的单个索引固定并循环通过所有其他矩阵. TL; DR:我有一个表示NxNxN … xN(9次)矩阵的数组. 我知道有一个简单的表达式,其中2-D矩阵被映射在1-D阵列中;这里有类似的东西吗? 解决方法
Raster scan是订购二维元素的标准方法.
如果你有一个2-D阵列测试[3] [3],你通过test [i] [j]访问它,相应的一维数组将是 double raster[3 * 3]; 你可以按如下方式访问它: raster[i * 3 + j]; 这可以推广到3个维度: double raster[3 * 3 * 3]; ... raster[a * 9 + b * 3 + c]; 或9维: double raster[3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3]; ... raster[a * 6561 + b * 2187 + c * 729 + d * 243 + e * 81 + f * 27 + g * 9 + h * 3 + i]; 让任何a … i索引变量保持不变,并在循环中更改其余部分,将访问9-D数组中的8-D切片. 您可能希望定义一些结构来保存所有这些索引,例如: struct Pos { int a,b,c,d,e,f,g,h,i; }; 然后您可以轻松地将位置转换为1-D索引: int index(Pos p) { return p.a * 6561 + p.b * 2187 + p.c * 729 + p.d * 243 + p.e * 81 + p.f * 27 + p.g * 9 + p.h * 3 + p.i; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |