我有一个s
向量,其大小为1*163840
,来自sizeX * sizeY * sizeZ = 64 * 40 * 60
。我想将1 * 163840矢量转换为三维矩阵,其在x轴上为64,在y轴上为40,在z轴上为64。
转换它的最简单方法是什么?
答案 0 :(得分:4)
使用重塑来轻松完成:
new_matrix = reshape(s, 64, 40, 60);
答案 1 :(得分:1)
reshape
是将元素重新排列为不同形状的正确方法,如Ben所指出的那样。
但是,必须注意向量和结果数组中元素的顺序:
>> v = 1:12;
>> reshape( v, 3, 4 )
1 4 7 10
2 5 8 11
3 6 9 12
Matlab首先安排元素"列"。
如果你想先得到一个"排"安排,你需要更复杂,并使用permute
>> permute( reshape( v, 4, 3 ), [2 1] )
1 2 3 4
5 6 7 8
9 10 11 12
了解我们如何reshape
到4-by-3(以及不 3-by-4)然后使用permute
命令转置结果。
答案 2 :(得分:0)
像这样初始化矩阵:
smatrix=zeros(64,40,60) // here you get an empty 3D matrix of the size you wanted.
使用for循环使用向量填充矩阵
for indexx=1:64
for indexy=1:40
for indexz=1:60
smatrix(indexx,indexy,indexz)=s(40*60*(indexx-1)+60*(indexy-1)+indexz);
end
end
end