我有一个1 x 15的值数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我需要使用for循环将它们重新排列成3 x 5矩阵:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
我该怎么做?
答案 0 :(得分:4)
我将向您展示三种方法。一个你需要for
循环的地方,另外两个你不需要循环:
for
循环首先,创建一个3 x 5的矩阵,然后跟踪将通过您的数组的索引。之后,创建一个双for
循环,帮助您填充数组。
index = 1;
array = 1 : 15; %// Array we wish to access
matrix = zeros(3,5); %// Initialize
for m = 1 : 3
for n = 1 : 5
matrix(m,n) = array(index);
index = index + 1;
end
end
matrix =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
for
循环简单地说,使用reshape
:
matrix = reshape(1:15, 5, 3).';
matrix =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
reshape
将采用向量并将其重组为矩阵,以便您首先按列填充矩阵。因此,我们希望在第一列中放置1到5,在第二列中放置6到10,在第三列中放入11到15。因此,我们的输出矩阵实际上是5 x 3.当你看到这个时,这实际上是我们想要的矩阵的转置版本,这就是你.'
转置矩阵的原因回来。
for
循环的另一种方法(帽子的尖端转到Luis Mendo)您可以使用vec2mat
,并指定您的矩阵需要有5列值:
matrix = vec2mat(1:15, 5);
matrix =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
vec2mat
采用向量并将其重新整形为与第二个参数中指定的列数相同的矩阵。在这种情况下,我们需要5列。
答案 1 :(得分:2)
为了(bsx)乐趣,这是另一种选择......
bsxfun(@plus,1:5,[0:5:10]')
ans =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
可读性较差,可能更快,但是谁在乎它是否是一个如此小的数组...
答案 2 :(得分:0)
A = [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ] ;
A = reshape( A' , 3 , 5 ) ;
A' = 1 2 3 4 5
6 7 8 9 10
11 12 13 14 15