Re: [問題] 請教如何加快矩陣的排列運算已回收

看板MATLAB作者 (B仔)時間17年前 (2008/12/11 22:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
a=[ 12 1;... 32 4;... 43 3;... 75 5;... 12 2;... 32 1;... 43 1;... 75 5]; element = a(:,1)'; per_element_num = a(:,2).'; acc_num = conv(per_element_num, ones(size(per_element_num))); % accumulated number acc_num = acc_num(1:length(per_element_num)); trans_idx = zeros(1,acc_num(end)); % transition index trans_idx(acc_num) = 1; trans_idx_rev = fliplr(trans_idx); acc_idx_rev = conv(trans_idx_rev, ones(size(trans_idx_rev))); acc_idx_rev = acc_idx_rev(1:acc_num(end)); acc_idx = length(per_element_num)-fliplr(acc_idx_rev)+1; % accumulation index b = element(acc_idx) 試了一下不用迴圈的寫法 我把每個步驟拆開來寫 應該可以知道每個步驟的用意 主要就是利用conv指令造出對應的index 參考看看 ※ 引述《qllvv (百事檸檬可樂兒)》之銘言: : ※ 引述《cfleu (世事難預料)》之銘言: : : 小弟最近要重排一個矩陣..原始的樣子像這樣 : : 26 1 : : 27 5 : : 28 6 : A=[26 1; : 27 5; : 28 6;] : B=[] : for II=1:3 : B=[B repmat([A(II,1)],1,A(II,2) ] : end : 一時想不出不用迴圈的辦法 : : 排完以後要變成 : : 26 27 27 27 27 27 28 28 28 28 28 28 : : 這個矩陣有點大..一共要排3408603個.. : : 目前想到的方法有兩個 : : 1.土法煉鋼一個一個排..這個已經跑了一天一夜了.. : : 2.將矩陣補成如下方陣以後..在排成一列..最後去0 : : 26 0 0 0 0 0 : : 27 27 27 27 27 0 : : 28 28 28 28 28 28 : : 方法二感覺起來比較快..但是小弟的電腦排不了這麼大的方陣(1467x844149) : : 都在捕0時出現"Out of menory" : : 因此上來請教除了上面這些方法外還有啥可以加速執行效果的 : : 因為後面小弟還有95個同樣的檔案..不是很想這樣子慢慢跑 : : 感謝.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.216.211
文章代碼(AID): #19GIXXgL (MATLAB)
文章代碼(AID): #19GIXXgL (MATLAB)