【发布时间】:2017-07-03 13:06:10
【问题描述】:
我是一名物理学家,目前正在编写一个处理多维积分的 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;
}
}
即我可以固定一个索引并循环浏览其他索引。 同样的过程也可以扩展到第二个和第三个索引。
如何使用double test[3*3*3] 实现相同的效果?请记住,三维矩阵只是一个例子;我正在处理的真实矩阵是 9 维的,因此我需要一种通用方法来保持矩阵的单个索引固定并循环遍历所有其他矩阵。
TL;DR:我有一个表示 NxNxN...xN(9 次)矩阵的数组。 我需要对数组执行一些计算,就好像我的矩阵的单个索引是固定的,而所有其他索引都在循环遍历它们所有可能的值。
我知道对于二维矩阵映射到一维数组的情况有一个简单的表达式;这里有类似的东西吗?
【问题讨论】:
-
只是一些强迫症术语 - 矩阵是一个 2 维张量
-
@spug OCD?真的吗?
-
@Walter as in,我知道 OP 的意思,但还是觉得有必要纠正他
-
关于您的示例的旁注:您应该为您的尺寸使用不同的尺寸。为
3*3*3编写解决方案意味着您永远不知道哪个3代表哪个维度;) -
从编程的角度来看,我被指示使用 NxNxN...xN 个元素的数组来代替...为什么?这是锻炼吗?是为了速度吗?