Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 通过将子矩阵分布到三维来重塑矩阵_Matlab_Matrix_Vectorization_Reshape - Fatal编程技术网

Matlab 通过将子矩阵分布到三维来重塑矩阵

Matlab 通过将子矩阵分布到三维来重塑矩阵,matlab,matrix,vectorization,reshape,Matlab,Matrix,Vectorization,Reshape,我有一个长的nx3矩阵。例如,我取一个9x3矩阵 A = 8 9 8 9 2 9 2 9 6 9 9 1 6 5 8 1 8 9 3 2 7 5 4 7 9 9 7 现在我想对它进行重塑(将连续的3x3子矩阵转换到下一个维度),这样 out(:,:,1) = 8 9 8 9 2 9 2

我有一个长的
nx3
矩阵。例如,我取一个
9x3
矩阵

A =

 8     9     8
 9     2     9
 2     9     6
 9     9     1
 6     5     8
 1     8     9
 3     2     7
 5     4     7
 9     9     7
现在我想对它进行重塑(将连续的
3x3
子矩阵转换到下一个维度),这样

out(:,:,1) = 
 8     9     8
 9     2     9
 2     9     6
out(:,:,2)
 9     9     1
 6     5     8
 1     8     9
out(:,:,3)
 3     2     7
 5     4     7
 9     9     7
我可以用循环来实现这一点,但我想知道如何将这个过程矢量化。。 我可以单独使用
重塑
置换
吗?

是的,您可以使用和:



这可能是一种方法-

N = 3
out = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])
这种方法的优点是避免了在应用程序中使用的转置

样本运行-

A =
     8     9     8
     9     2     9
     2     9     6
     9     9     1
     6     5     8
     1     8     9
     3     2     7
     5     4     7
     9     9     7
out(:,:,1) =
     8     9     8
     9     2     9
     2     9     6
out(:,:,2) =
     9     9     1
     6     5     8
     1     8     9
out(:,:,3) =
     3     2     7
     5     4     7
     9     9     7

不错,你跑得快了一点。我提出了同样的解决方案,尽管我在第三维使用了
numel(A)/9
,因为OP说他有
nx3
数组要拆分。@hbaderts是的,可以概括一下,我将包括它:)谢谢@hbaderts
numel(A)/9
不是一个好选择,因为您还需要了解9。所以
size(A,2)
更直接。我知道我可以用
permute
重塑
来实现这一点,我尝试了几种方法,但没有成功。我没有想到要把它转过来。谢谢和+1:)@santhassalai实际上你可以避免转置!:)这当然是真的+1我希望你不介意,我把它也包括在我的答案中,因为其他答案都是一样的。哎呀,现在我对另一个答案的评论是毫无意义的,哈哈,顺便说一句,谢谢你的努力+1:)@thewaywewalk我想这很好,但我想保留这个答案:)
N = 3
out = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])
A =
     8     9     8
     9     2     9
     2     9     6
     9     9     1
     6     5     8
     1     8     9
     3     2     7
     5     4     7
     9     9     7
out(:,:,1) =
     8     9     8
     9     2     9
     2     9     6
out(:,:,2) =
     9     9     1
     6     5     8
     1     8     9
out(:,:,3) =
     3     2     7
     5     4     7
     9     9     7