2017-09-15 143 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