2017-09-15 142 views
1

我在从它矩阵A以特定的方式上的MATLAB矩阵重新排列列

enter image description here

我(杂乱)码的奇数列建立一个列矩阵B中的MATLAB代码工作是

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 

(它选择列,但并没有把一切都放在一列,因为它应该) 有人可以帮我做同样的一个更简单的方法?

回答

3

这里有一个不太杂乱方式通过简单地列索引与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 
3

代码如下给出你的例子;

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

Result = t'; 
+0

具有与每个循环生长基质是不好的做法和[应当使用预分配来避免](https://uk.mathworks.com/help/matlab/matlab_prog/preallocating-arrays.html) ,你也应该使用'。'来转置,而不是'''这是复共轭转置。 – Wolfie

+0

有没有一个解决方案,因为你知道.... –

+1

我知道,我不是说你的解决方案不*工作*,我试图帮助你学习一些最佳实践。在您尝试教育他人的环境中,尝试设置可能的最佳示例总是很好的。 – Wolfie