如何将Matlab向量转换为3D矩阵

5
我有一个向量s,大小为1*163840,来自sizeX * sizeY * sizeZ = 64 * 40 * 60。我想将这个1*163840的向量转换成一个三维矩阵,其中x轴有64个元素,y轴有40个元素,z轴有64个元素。
最简单的方法是什么?
3个回答

4
使用reshape函数可以轻松实现:
new_matrix = reshape(s, 64, 40, 60);

顺便提一下,如果想让 sizeX 为 64,第二维的大小不应该是 64 吗? - Shai

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×3(而不是 3×4),然后使用permute命令对结果进行转置。

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

2
@rayryeng 它也快得多。Matlab会进行一些优雅的内存重排,而不是访问一个巨大数组中的每个元素。 - Fantastic Mr Fox
1
不错的尝试,但我必须点踩:嵌套循环而不是使用“reshape”?这是错误的理解和实践。这就像为了一口水挖井 - 你现在根本不需要这样做... - Shai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接