在Matlab中使用for循环重新排列数组

时间:2014-06-03 22:57:03

标签: arrays matlab matrix

我有一个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

我该怎么做?

3 个答案:

答案 0 :(得分:4)

我将向您展示三种方法。一个你需要for循环的地方,另外两个你不需要循环:

方法#1 - 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

方法#2 - 没有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.当你看到这个时,这实际上是我们想要的矩阵的转置版本,这就是你.'转置矩阵的原因回来。

方法#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