从数学角度来看,我需要处理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;}总结
以上是内存溢出为你收集整理的c – 如何处理9维矩阵的索引全部内容,希望文章能够帮你解决c – 如何处理9维矩阵的索引所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)