1

假设我有一个 3x4x5x6 java double 数组,我按以下方式a展开为长度为 360 的 ArrayList :b

for (int i = 0; i<a.length; i++){
    for (int j = 0; j<a[0].length; j++){
        for (int k = 0; k<a[0][0].length; k++){
            for (int m = 0; m<a[0][0][0].length; m++){
                b.add(a[i][j][k][m]);
            }
        }
    }
}

给定 的索引b,是否有一种简单的方法可以在 中找到相应的 4 元组索引a

4

2 回答 2

2

假如说

  • b是一维数组上的索引
  • i,j,k,m是多维数组上的四个结果索引
  • si,sj,sk,sm是任何维度的大小

你可以使用基本的数学,它应该是这样的

  • m = b % sm
  • k = (b / sm) % sk
  • j = (b / (sm*sk)) % sj
  • i = b / (sm*sk*sj)

基本上,对于包含的数组的每个大小(通过乘以大小),您将每个索引增加一个,并将其包装在它的维度上。

于 2012-09-14T18:11:41.543 回答
1

在 MATLAB 中,您可以使用ind2sub将线性索引转换为下标。

例如。一个 4 维 (3 x 3 x 3 x 3) 矩阵:

#% The dimensions of n-dimensional matrix:
SizeVector = [ 3, 3, 3, 3 ];

#% Example linear index:
LinearIndex = 17;

[i1, i2, i3, i4 ] = ind2sub(SizeVector, LinearIndex);

i1 =
   2

i2 =
   3

i3 =
   2

i4 =
   1

要检查这是否正确,您可以从这些下标手动计算原始线性地址:

 (i4-1)*3^3 + (i3-1)*3^2 + (i2-1)*3^1 + (i1-1)*3^0 + 1

ans =
    17
于 2012-09-14T20:15:37.803 回答