16

假设我有一个矩阵a = [1 2 3 4 5 6];,我如何以逐行方式重塑它,例如 reshape(a, 2, 3)产生

1 2 3 
4 5 6

而不是 MATLAB 生成的默认按列结果:

1 3 5 
2 4 6

我相信这是一项微不足道的任务,它可能具有实现此目的的内置功能。我已经实现了一个完美的函数......但是,有没有更短、更整洁、更 MATLAB 的方式?谢谢。

function y = reshape2(x, m, n) 
  y = zeros(m, n);

  ix = 0; 
  for i = 1:m
     for j = 1:n
         ix = ix + 1;
         y(i, j) = x(ix);
     end 
  end 
end
4

3 回答 3

23

这个怎么样?

reshape(a, 3, 2)'

于 2013-05-16T16:09:17.493 回答
3

m*n以行方式将矩阵 A重塑为p*k矩阵 B 的一般方法是:

c=reshape(A',1,m*n) 
B=reshape(c,k,p)' 
example: m=3 n=4 , p=6, q=2
A=[1 2 3 4; 5 6 7 8; 9 10 11 12] 
c=[1 2 3 4 5 6 7 8 9 10 11 12] 
B=[1 2 ; 3 4; 5 6; 7 8; 9 10; 11 12] 
于 2013-10-23T15:27:58.413 回答
2

它确实是 reshape(A',cols,rows)'

( reshape(a', 3, 2)' 在你的例子中)

于 2015-06-13T05:43:56.820 回答