关于matlab中多维数组某一单元物理存放位置的计算

以三维数组为例,在三维数组[d1,d2,d3]中,(a,b,c)的物理存放位置为(a-1)*d2*d3+(b-1)*d3+c,能否举例讲解一下,谢谢!

matlab是按从低维到高维的顺序存放的
例如有个a矩阵是2x2x2的三维矩阵,实际的储存顺序是
a(1,1,1)
a(2,1,1)
a(1,2,1)
a(2,2,1)
a(1,1,2)
a(2,1,2)
a(1,2,2)
a(2,2,2)
也就是低维的下标改变比高维的频繁,第一维变化最快
实际上,我们可以用(:)将一个矩阵变为按其储存顺数排列的列向量
例如
b=a(;);
这时候b就是8x1的数列
b(1)
b(2)
..
b(8)
就是按照上述的顺序排列的

其实对于高维数组,我们知道我们可以用
a(i,i,k)那样的方式引用其中三维下标分别为i,j,k的那个元素
其实也可以用a(n)来直接引用储存顺序中第n个元素
也就是上边2x2x2矩阵的例子中
a(1,2,1) 的结果和 a(3)的结果是一样的

而matlab其实也提供函数实现子下标sub和总下标ind之间的转化
IND = sub2ind(siz,I,J,...) 当然I J K不能超过那一维的最大值
[I,J,.....] = ind2sub(siz,IND) 当然 IND不能超过矩阵的元素总个数

其中sub2ind基本原理大概就是利用你那个(a-1)*d2*d3+(b-1)*d3+c公式计算出储存位置

siz是矩阵的大小,例如这里的2x2x2
ind=sub2ind([2 2 2],1,2,1)得到的ind就是3
[i j k]=ind2sub([2 2 2],3)得到的i,j,k就分别是1,2,1
温馨提示:答案为网友推荐,仅供参考
相似回答