以特定方式在MATLAB矩阵上重新排列列

时间:2017-09-15 22:18:46

标签: matlab loops matrix

我正在研究一种MATLAB代码,它从矩阵A的奇数列构建一个列矩阵B

enter image description here

我的(杂乱)代码是

A = rand(5,10);

i = 1
ii = 1
while i <= size(A,2)
    if mod(i+1,2)==0
        B(1:size(A,1),ii) = A(:,i)
        ii = ii + 1
    i = i+1
    end
    i = i + 1
end

(选择列但不会将所有内容放在一列中,因为它应该如此) 有人可以帮助我以更简单的方式做同样的事情吗?

2 个答案:

答案 0 :(得分:3)

这是一种 less-messy 方式,只需使用从第一列开始的2的步长进行列索引,然后重新转换为所需的列向量 -

reshape(A(:,1:2:end),[],1)

示例运行 -

>> A
A =
     1     5     9    13    17
     2     6    10    14    18
     3     7    11    15    19
     4     8    12    16    20
>> reshape(A(:,1:2:end),[],1)
ans =
     1
     2
     3
     4
     9
    10
    11
    12
    17
    18
    19
    20

答案 1 :(得分:3)

以下是关于您的示例的代码;

A = rand(5,10)
t = A(:,1)'
for R =3: 2: length(A)
    t = [t A(:,R)']
end

Result = t';