| 6 | 1/1 | 返回列表 |
| 查看: 1111 | 回復(fù): 5 | |||
愛紅茶的貓木蟲 (小有名氣)
|
[求助]
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í)間很長。 在此求助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)算,就看出其中的奧秘了。 |
木蟲 (小有名氣)
| 6 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿天大材料與化工(085600)總分338 +5 | 蔡大美女 2026-03-13 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 求材料調(diào)劑 +10 | 隔壁陳先生 2026-03-12 | 10/500 |
|
|
[考研] 0703化學(xué) 305求調(diào)劑 +4 | FY_yy 2026-03-14 | 4/200 |
|
|
[考研] 304求調(diào)劑 +6 | 司空. 2026-03-18 | 6/300 |
|
|
[考研] 266求調(diào)劑 +5 | 陽陽哇塞 2026-03-14 | 9/450 |
|
|
[考研] 材料與化工一志愿南昌大學(xué)327求調(diào)劑推薦 +8 | Ncdx123456 2026-03-13 | 9/450 |
|
|
[考研] 0703化學(xué)求調(diào)劑 總分331 +3 | ZY-05 2026-03-13 | 3/150 |
|
|
[考研] 265求調(diào)劑 +3 | 梁梁校校 2026-03-17 | 3/150 |
|
|
[考研] 326求調(diào)劑 +5 | 上岸的小葡 2026-03-15 | 6/300 |
|
|
[碩博家園] 湖北工業(yè)大學(xué) 生命科學(xué)與健康學(xué)院-課題組招收2026級(jí)食品/生物方向碩士 +3 | 1喜春8 2026-03-17 | 5/250 |
|
|
[考研] 290求調(diào)劑 +3 | p asserby. 2026-03-15 | 4/200 |
|
|
[考研] 求老師收留調(diào)劑 +4 | jiang姜66 2026-03-14 | 5/250 |
|
|
[考博] 東華理工大學(xué)化材專業(yè)26屆碩士博士申請(qǐng) +6 | zlingli 2026-03-13 | 6/300 |
|
|
[考研] 070305求調(diào)劑 +3 | mlpqaz03 2026-03-14 | 4/200 |
|
|
[考研] 本科南京大學(xué)一志愿川大藥學(xué)327 +3 | 麥田耕者 2026-03-14 | 3/150 |
|
|
[考研] 中科大材料專碩319求調(diào)劑 +3 | 孟鑫材料 2026-03-13 | 3/150 |
|
|
[考研] 266求調(diào)劑 +4 | 學(xué)員97LZgn 2026-03-13 | 4/200 |
|
|
[考研] 工科材料085601 279求調(diào)劑 +8 | 困于星晨 2026-03-12 | 10/500 |
|
|
[考研] 328化工專碩求調(diào)劑 +4 | 。,。,。,。i 2026-03-12 | 4/200 |
|
|
[考研] 一志愿山大07化學(xué) 332分 四六級(jí)已過 本科山東雙非 求調(diào)劑! +3 | 不想理你 2026-03-12 | 3/150 |
|