2012-09-14 126 views
1

說我有一個3x4x5x6 java的雙陣列a我展開成一個ArrayList以下列方式長度360的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

回答

1

假設

  • 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)

基本上你遞增的包含陣列的每一個尺寸各指標由一個(乘以大小)和你把它包裝在其尺寸。

1

在MATLAB中,您可以使用ind2sub將線性索引轉換爲下標。

例如, 4維(3×3×3×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