我有这个包含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)]
答案 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
是行索引:此命令将返回一个向量,即矩阵行。
如果您想在单个元素中使用向量,则必须使用单元格数组而不是常规矩阵。