Re: [問題] 請教如何加快矩陣的排列運算已回收
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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章