qq asked in 電腦與網際網路軟體 · 1 decade ago

MATLAB,矩陣組合問題

如果A矩陣為

1 3 5 7 9

1 1 1 1 1

B矩陣為

2 4 6 8 0

2 2 2 2 2

A和B組合成

1 2 3 4 5 6 7 8 9 0

1 2 1 2 1 2 1 2 1 2

該怎樣弄??

3 Answers

Rating
  • Ryan
    Lv 5
    1 decade ago
    Favorite Answer

    哈囉,你好:我提供兩種方式供你參考,第一個方法是(1) 分別取A,B的第k_row列並堆疊成,[A(k_row,:); B(k_row,:)](2) 然後利用reshape方式去做位置安排,由於reshape是屬於row oriented(列方向先取出),所以會先取出A的第一個元素,再取B的第一個元素,再取A的第二個元素,再取B的第二個元素....一直取完為止。第二個方法是直接指定A到C的單數位置(col方向),接著指定B到C的偶數位置(col方向)。最後我再將我的方法和前面兩位朋友(老師和阿泰)的方法做了簡單的執行時間長短比較。程式碼如下:clear all;clc;a=[1 3 5 7 9;1 1 1 1 1];b=[2 4 6 8 0;2 2 2 2 2];%% 老師ticab=zeros(size(a,1),size(a,2)+size(b,2));for k=0:size(a,2)-1    ab(:,2*k+1)=a(:,k+1);endfor k=1:size(b,2)    ab(:,2*k)=b(:,k);endtocA=[1 3 5 7 91 1 1 1 1 ];B=[2 4 6 8 02 2 2 2 2];%% 阿泰ticC=[];for i=1:5C=[C,A(:,i) B(:,i)];endtoc%% Ryan :method 1tic[m,n] = size(A);for k_row = 1:mtmp = [A(k_row,:); B(k_row,:)];C2(k_row,:) = reshape(tmp,1,2*n);endtoc%% Ryan :method 2tic[m,n] = size(A);% C = zeros(m,2*n);C3(:,1:2:2*n)=A;C3(:,2:2:2*n)=B;toc

    2006-03-21 12:19:27 補充:

    執行時間分別為Elapsed time is 0.000062 seconds. <---老師Elapsed time is 0.000037 seconds. <---阿泰Elapsed time is 0.000029 seconds. <---Ryan's method 1Elapsed time is 0.000011 seconds. <---Ryan's method 2

  • 1 decade ago

    A=[1 3 5 7 9;1 1 1 1 1]

    B=[2 4 6 8 0;2 2 2 2 2]

    C=[];

    for i=1:5

    C=[C,a(:,i) b(:,i)];

    end

    再鍵入C即可看答案

    C=

    1 2 3 4 5 6 7 8 9 0

    1 2 1 2 1 2 1 2 1 2

    Source(s): 自己
  • 老師
    Lv 7
    1 decade ago

    a=[1 3 5 7 9;1 1 1 1 1]b=[2 4 6 8 0;2 2 2 2 2]ab=zeros(size(a,1),size(a,2)+size(b,2));for k=0:size(a,2)-1    ab(:,2*k+1)=a(:,k+1);endfor k=1:size(b,2)    ab(:,2*k)=b(:,k);endab---------------------存檔成 testab.m執行>> testaba =     1     3     5     7     9     1     1     1     1     1b =     2     4     6     8     0     2     2     2     2     2ab =     1     2     3     4     5     6     7     8     9     0     1     2     1     2     1     2     1     2     1     2

    2006-03-22 09:39:25 補充:

    Ryan的方法的確比較有效率但是我個人再寫程式時習慣上用迴圈可能因為我以前開始寫程式時使用Fortran的關係而且目前我們寫的這一些程式都非常小所以時間上的差異幾乎感覺不到

Still have questions? Get your answers by asking now.