| 5 | 1/1 | 返回列表 |
| 查看: 1114 | 回復(fù): 5 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點(diǎn)擊這里查看本話題的所有回帖 | |||
愛紅茶的貓木蟲 (小有名氣)
|
[求助]
MATLAB編程優(yōu)化問題 已有2人參與
|
||
|
求助一個(gè)matlab編程的優(yōu)化問題,類似霍夫變換(Hough Transform)的累加問題。 一維向量a里面為矩陣A的行下標(biāo)信息,一維向量b里面是A的列下標(biāo)信息。 使用for循環(huán)的賦值程序如下: for i = 1 :m for j = 1 : n count = A(a(i), b(j)) + 1; A(a(i), b(j)) = count; end end 問題是matlab的for循環(huán)效率低下,如果m和n的值非常大的話(>10000),計(jì)算時(shí)間很長(zhǎng)。 在此求助matlab高手,能否使用矩陣實(shí)現(xiàn)的方法代替for循環(huán)來提高編程效率? 期待確實(shí)有幫助的應(yīng)助回帖 |
木蟲 (小有名氣)
榮譽(yù)版主 (文壇精英)
![]() |
專家經(jīng)驗(yàn): +518 |
銅蟲 (初入文壇)
|
clear all clc A=rand(10); B=A; %留著比較 a=[2 2 6 8 5 5 5 5]; m=length(a) b=[1 1 1 3 3 9 9 9 4 4]; n=length(b); for i =1:m for j = 1 : n count = A(a(i), b(j)) + 1; A(a(i), b(j)) = count; end end % 第二種方法 a=sort(a) b=sort(b) [a,ida]=unique(a) [b,idb]=unique(b) ida=[0,ida] idb=[0,idb] counta=diff(ida) countb=diff(idb) B(a,b)=B(a,b)+counta'*countb %檢查兩端程序是否相等 D=A-B %經(jīng)過試驗(yàn),D的元素有時(shí)候有數(shù)值誤差,但是都在1.0e-14量級(jí),稍微處理就行 |
銅蟲 (初入文壇)
|
理解編程思想就不難理解那幾句話了,至于那些函數(shù)是什么意思可以查詢相關(guān)的說明,這里將編程思想說說吧。 因?yàn)閍,b中存儲(chǔ)的是A矩陣的行標(biāo)和列標(biāo),如果那個(gè)下標(biāo)出現(xiàn)的次數(shù)多,則A中對(duì)應(yīng)元素被加的量就大。所以首先是找出a,b中所含不同的下標(biāo)到底有多少,只對(duì)這些不同下標(biāo)進(jìn)行一次尋址。找到A中對(duì)應(yīng)的元素后,加上其因該被訪問的次數(shù)就行了。從而不必要反復(fù)用for循環(huán)。 下面幾行得到a,b中到底還有多少個(gè)不同元素, a=sort(a) %為什么要先排序是為了后面通過diff能求出不同元素的計(jì)數(shù),也就是a中不同元素應(yīng)該被訪問的次數(shù)。 b=sort(b) [a,ida]=unique(a) %找出不同的元素,經(jīng)過這一步后a中就只含有不同元素了,不會(huì)有重復(fù)的。 [b,idb]=unique(b) 下面幾行是找出a,b不同元素出現(xiàn)的次數(shù),也就是訪問的計(jì)數(shù) ida=[0,ida] idb=[0,idb] counta=diff(ida) countb=diff(idb) 為什么能得到計(jì)數(shù),是因?yàn)閕da記錄的是a中不同元素在a中最后一次出現(xiàn)的位置。 B(a,b)得到的是A的一個(gè)子矩陣(“上面講了,B=A),也就是這些元素才能被你給的那些兩個(gè)for循環(huán)訪問到。 D=counta'*countb 得到一個(gè)與B(a,b)同樣大小的矩陣,他們的對(duì)應(yīng)元(行被訪問次數(shù)乘以列被訪問次數(shù),就是其交叉點(diǎn)處總的訪問次數(shù)) D(i,j)就是A(a(i),b(i))應(yīng)該被最終加上的數(shù)字,也就是你那兩個(gè)for循環(huán)中A(a(i),b(i))應(yīng)該被訪問到的次數(shù)。 我也覺得很難用語言表達(dá)清楚,如果還是不明白你一步步用紙驗(yàn)算,就看出其中的奧秘了。 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[論文投稿]
申請(qǐng)回稿延期一個(gè)月,編輯同意了。但系統(tǒng)上的時(shí)間沒變,給編輯又寫郵件了,沒回復(fù)
10+3
|
wangf9518 2026-03-17 | 4/200 |
|
|---|---|---|---|---|
|
[考研] 0856調(diào)劑,是學(xué)校就去 +6 | sllhht 2026-03-19 | 7/350 |
|
|
[考研] 一志愿西安交通大學(xué)材料工程專業(yè) 282分求調(diào)劑 +5 | 楓橋ZL 2026-03-18 | 7/350 |
|
|
[考研] 085600材料與化工調(diào)劑 324分 +10 | llllkkkhh 2026-03-18 | 12/600 |
|
|
[考研] 化學(xué)求調(diào)劑 +3 | 臨澤境llllll 2026-03-17 | 4/200 |
|
|
[考研] 材料考研調(diào)劑 +3 | xwt。 2026-03-19 | 3/150 |
|
|
[考研] 346求調(diào)劑[0856] +3 | WayneLim327 2026-03-16 | 6/300 |
|
|
[考研] 274求調(diào)劑 +6 | S.H1 2026-03-18 | 6/300 |
|
|
[考研] 材料專碩英一數(shù)二306 +5 | z1z2z3879 2026-03-18 | 5/250 |
|
|
[考研] 0703化學(xué)調(diào)劑,求各位老師收留 +10 | 秋有木北 2026-03-14 | 10/500 |
|
|
[考研] 一志愿華中科技大學(xué),080502,354分求調(diào)劑 +4 | 守候夕陽CF 2026-03-18 | 4/200 |
|
|
[考研] 085410人工智能專碩317求調(diào)劑(0854都可以) +3 | xbxudjdn 2026-03-18 | 3/150 |
|
|
[考研] 295求調(diào)劑 +3 | 一志愿京區(qū)211 2026-03-18 | 5/250 |
|
|
[考研] 311求調(diào)劑 +11 | 冬十三 2026-03-15 | 12/600 |
|
|
[考研] 0703化學(xué)求調(diào)劑 總分331 +3 | ZY-05 2026-03-13 | 3/150 |
|
|
[考研] 301求調(diào)劑 +9 | yy要上岸呀 2026-03-17 | 9/450 |
|
|
[考研] 一志愿南京大學(xué),080500材料科學(xué)與工程,調(diào)劑 +4 | Jy? 2026-03-16 | 4/200 |
|
|
[考研] [導(dǎo)師推薦]西南科技大學(xué)國防/材料導(dǎo)師推薦 +3 | 尖角小荷 2026-03-16 | 6/300 |
|
|
[考研] 本科南京大學(xué)一志愿川大藥學(xué)327 +3 | 麥田耕者 2026-03-14 | 3/150 |
|
|
[考研] 311求調(diào)劑 +3 | 冬十三 2026-03-13 | 3/150 |
|