MATLAB 板


LINE

※ 引述《sunev (Veritas)》之銘言: : 標題: Re: [請益]for迴圈內差法過慢 : 時間: Fri Jun 23 18:18:39 2017 : ※ 引述《s455164 (夢想家)》之銘言: : : 有點卡關.. : : 我有三個陣列: : : 三維陣列A(100,100,51)、二維陣列B(100,100)、一維陣列C(1,51) : : 其中A陣列的第三個維度是與C互相呼應的(A(:,:,1)是對應C(1,1)) : : 想要利用B陣列與C陣列之間的比例關係去對A陣列 : : 內插出一個新的二維陣列A'(100,100) : : 我自己的寫法是這樣的 : : A' = zeros(100,100); : : for i = 1:100 : : for j = 1:100 : : for k = 1:51-1 : : if ((B(i,j)>=C(k)) && (B(i,j)<=C(k+1))) || (((B(i,j)>=C(k)) && (B(i,j)>=C(k+1) : : A'(i,j) = (A(i,j,k+1)-A(i,j,k)) * (B(i,j)-C(k))/(C(k+1)-C(k)) + A(i,j,k); : : elseif (B(i,j) <= C(k)) && (B(i,j) < = C(k+1)) : : A'(i,j) = A(i,j,k+1) - (A(i,j,k+1)-A(i,j,k)) * (C(k+1)-B(i,j))/(C(k+1)-C(k)) : : end : : end : : end : : end : : 可是發現計算時間真的太長了,要花到3個多小時...不知道可以如何改善 : : 想請教如何解決,麻煩大家了 : -- :



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.138.130
: ※ 文章網址: https://webptt.com/m.aspx?n=bbs/MATLAB/M.1498213121.A.C13.html : 推 s455164: 阿不好意思 對其實以matlab的寫法 應該要表示為AA 06/23 22:52 : 推 s455164: 好的 那我回去試看看 感謝你 06/23 23:13 : 推 s455164: AA不會隨k變動 06/23 23:30 : → s455164: 但是AA上的元素,例如AA( 1 , 2 )是先判斷 B陣列的B( 1 , 06/23 23:30 : → s455164: 2 ) 的值是介在C陣列中的哪個位置後[假如是C(4) < B(1, 06/23 23:30 : → s455164: 2 ) < C(5)],再提出相對應位置的A(1,2,4)&A(1,2,5)去內插 06/23 23:30 : → s455164: 出AA(1,2)這樣 06/23 23:30 : → sunev: 所以在所有k裡取最後條件成立的值? 06/24 07:40 : 推 s455164: 取最後k維度出來的值 再丟回相對應的AA( i , j )之中 06/24 09:13 : → s455164: 所以AA陣列上的每個元素需要用到的C(k)都是不一樣的,我 06/24 09:21 : → s455164: 有想過是讓A陣列以A(:,:,K)計算到一個新的陣列A1裡,再只 06/24 09:21 : → s455164: 挑要的位置出來提到AA中[AA(i,j)=A1(i,j]但是這樣好像更 06/24 09:21 : → s455164: 慢..就不行了 06/24 09:21 : → sunev: 你的C是排序過的嗎? 06/24 11:49 : 推 s455164: 對喔 C是已經整理過的 06/24 12:14 : 推 s455164: http://i.imgur.com/tMCtsR4.jpg 06/24 12:37 原來如此 這樣的話你if條件可再簡化 先把迴圈作法整理一次 AA=zeros(100,100); for i = 1:100 for j = 1:100 for k = 2:51 if B(i,j)<=C(k) AA(i,j) = A(i,j,k-1)... + (A(i,j,k)-A(i,j,k-1)) * (C(k)-B(i,j))/(C(k)-C(k-1)); break end end end end 這邊是假設B的值一定落在C裡面 如果B有可能跑到外面要再加例外控制 如果程式邏輯是這樣的話 能省的迴圈好像只有最裡面的k迴圈 for i = 1:100 for j = 1:100 k=find(B(i,j)<=C,1); AA(i,j)=A(i,j,k-1) + (A(i,j,k)-A(i,j,k-1)) * (C(k)-B(i,j))/(C(k)-C(k-1)); end end 這兩層迴圈可以想辦法用arrayfun取代 但應該不會比較快就是 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.138.130
※ 文章網址: https://webptt.com/m.aspx?n=bbs/MATLAB/M.1498280900.A.298.html
1F:→ sunev: 如果C是等間隔,k就可以用算的,應可再加速 06/24 13:20
2F:推 s455164: 好的 C是等間隔沒錯 06/24 15:57
3F:→ s455164: 那我試看看 06/24 15:57
4F:→ sunev: 等間隔的話,應該可以完全避掉迴圈 06/25 19:30







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP