java如何将一维索引转换为多维数组中的相应索引?
假设我有一个3x4x5x6 java双数组a
,我用以下方式将其展开为一个长度为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
的索引,是否有一种简单的方法可以在a
中找到相应的4元组索引
# 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)
基本上,对于包含的数组的每一个大小,将每个索引递增一(通过乘以大小),并将其包装到其维度上
# 2 楼答案
在MATLAB中,可以使用^{} 将线性索引转换为下标
例如,一个四维(3x3x3x3)矩阵:
要检查是否正确,您可以从以下下标手动计算原始线性地址: