我如何在matlab

时间:2016-04-16 14:19:15

标签: arrays matlab matrix

我有这个包含12个数字的数组 P = [1 2 3 4 5 6 7 8 9 10 11 12] 我想把这个数组中的每个3个元素放在matlab的2d矩阵的一个单元格中,制作2x2矩阵,每个单元格都有一个点,用这个公式(x,y,z),但我在这一行有问题(我认为这个概念是错的!)

x(i,j)= cpoints(counter) cpoints(counter+1) cpoints(counter+2);

完整代码:

p = [ 1 2 3 4 5 6 7 8 9 10 11 12]
nr = 2;
nc  =2;
counter = 0;
for i=0:(nr-1)
   for j=0:(nc-1)
      x(i,j)= p(counter) p(counter+1) p(counter+2);
      counter = counter +3;
   end
end

我想要这样的结果[(1,2,3)(4,5,6); (7,8,9)(10,11,12)]

1 个答案:

答案 0 :(得分:0)

由于reshape()函数可以轻松避免循环,(正如其名称所示)函数可以重塑数组。在你的情况下,你可以这样做:

p=reshape(p,3,[])';

以获得

p =

     1     2     3
     4     5     6
     7     8     9
    10    11    12

重塑形状函数将要重新整形的数组(p)作为第一个输入,因为以下参数是尺寸。但是,reshape()按列填充重新整形的数组,而在您的情况下,您希望它按行填充。所以首先我们用3行(第二个参数)重新整形数组,然后让Matlab相应地评估列数(第三个,空,参数)。稍后我们转换(')结果以获得最终矩阵。

但是,如果由于任何原因你必须使用循环,一个简单的解决方案可以是:

nc=3;                   % set the number of columns as 3
nr=numel(p)/nc;         % evaluate the number of rows
k=1;                    % this index will scan vector p
for i=1:nr              % in Matlab indices start at 1, not 0
   for j=1:nc
        x(i,j)=p(k);    % fill element (i,j) with the k-th element from p
        k=k+1;          % keep scanning p
   end
end

最后一点:在Matlab中,你不能在一个矩阵元素中存储3个元素。虽然您可以像我上面那样填充整行,然后为了获得三元组(x,y,z),您可以读取整行。要从矩阵X读取整行,您可以使用语法X(i,:),其中i是行索引:此命令将返回一个向量,即矩阵行。
如果您想在单个元素中使用向量,则必须使用单元格数组而不是常规矩阵。