| 6 | 1/1 | 返回列表 |
| 查看: 1130 | 回復(fù): 5 | |||
愛紅茶的貓木蟲 (小有名氣)
|
[求助]
MATLAB編程優(yōu)化問題 已有2人參與
|
|
求助一個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),計算時間很長。 在此求助matlab高手,能否使用矩陣實現(xiàn)的方法代替for循環(huán)來提高編程效率? 期待確實有幫助的應(yīng)助回帖 |
榮譽版主 (文壇精英)
![]() |
專家經(jīng)驗: +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)過試驗,D的元素有時候有數(shù)值誤差,但是都在1.0e-14量級,稍微處理就行 |
木蟲 (小有名氣)
銅蟲 (初入文壇)
|
理解編程思想就不難理解那幾句話了,至于那些函數(shù)是什么意思可以查詢相關(guān)的說明,這里將編程思想說說吧。 因為a,b中存儲的是A矩陣的行標(biāo)和列標(biāo),如果那個下標(biāo)出現(xiàn)的次數(shù)多,則A中對應(yīng)元素被加的量就大。所以首先是找出a,b中所含不同的下標(biāo)到底有多少,只對這些不同下標(biāo)進(jìn)行一次尋址。找到A中對應(yīng)的元素后,加上其因該被訪問的次數(shù)就行了。從而不必要反復(fù)用for循環(huán)。 下面幾行得到a,b中到底還有多少個不同元素, a=sort(a) %為什么要先排序是為了后面通過diff能求出不同元素的計數(shù),也就是a中不同元素應(yīng)該被訪問的次數(shù)。 b=sort(b) [a,ida]=unique(a) %找出不同的元素,經(jīng)過這一步后a中就只含有不同元素了,不會有重復(fù)的。 [b,idb]=unique(b) 下面幾行是找出a,b不同元素出現(xiàn)的次數(shù),也就是訪問的計數(shù) ida=[0,ida] idb=[0,idb] counta=diff(ida) countb=diff(idb) 為什么能得到計數(shù),是因為ida記錄的是a中不同元素在a中最后一次出現(xiàn)的位置。 B(a,b)得到的是A的一個子矩陣(“上面講了,B=A),也就是這些元素才能被你給的那些兩個for循環(huán)訪問到。 D=counta'*countb 得到一個與B(a,b)同樣大小的矩陣,他們的對應(yīng)元(行被訪問次數(shù)乘以列被訪問次數(shù),就是其交叉點處總的訪問次數(shù)) D(i,j)就是A(a(i),b(i))應(yīng)該被最終加上的數(shù)字,也就是你那兩個for循環(huán)中A(a(i),b(i))應(yīng)該被訪問到的次數(shù)。 我也覺得很難用語言表達(dá)清楚,如果還是不明白你一步步用紙驗算,就看出其中的奧秘了。 |
木蟲 (小有名氣)
| 6 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 307求調(diào)劑 +14 | 超級伊昂大王 2026-03-24 | 15/750 |
|
|---|---|---|---|---|
|
[考研] 一志愿鄭大材料工程290求調(diào)劑 +4 | Youth_ 2026-03-30 | 4/200 |
|
|
[考研] 332求調(diào)劑 +12 | 032500 2026-03-25 | 12/600 |
|
|
[考研] 材料專碩 085600求調(diào)劑 +5 | BBQ233 2026-03-30 | 5/250 |
|
|
[考研] 085600材料與化工調(diào)劑 +6 | kikiki7 2026-03-30 | 6/300 |
|
|
[考研] 375求調(diào)劑 +6 | 雨夏整夜 2026-03-29 | 6/300 |
|
|
[考研] 求調(diào)劑 +6 | 家佳佳佳佳佳 2026-03-29 | 6/300 |
|
|
[考研] 085600,材料與化工321分求調(diào)劑 +10 | 大饞小子 2026-03-28 | 10/500 |
|
|
[考研] 356求調(diào)劑 +4 | gysy?s?a 2026-03-28 | 4/200 |
|
|
[考研] 330分求調(diào)劑 +5 | qzenlc 2026-03-29 | 5/250 |
|
|
[考研] 356求調(diào)劑 +3 | gysy?s?a 2026-03-28 | 3/150 |
|
|
[考研] 311(085601)求調(diào)劑 +4 | liziyeyeye 2026-03-28 | 4/200 |
|
|
[考研] 322求調(diào)劑 +4 | 我真的很想學(xué)習(xí) 2026-03-23 | 4/200 |
|
|
[考研] 351求調(diào)劑 +4 | 麥克阿磊 2026-03-24 | 4/200 |
|
|
[考研] 求調(diào)劑 一志愿 本科 北科大 化學(xué) 343 +6 | 13831862839 2026-03-24 | 7/350 |
|
|
[考研]
材料調(diào)劑
5+4
|
想要一壺桃花水 2026-03-25 | 10/500 |
|
|
[考研] 環(huán)境專碩324分求調(diào)劑推薦 +5 | 軒小寧—— 2026-03-26 | 5/250 |
|
|
[考研] 材料調(diào)劑 +3 | iwinso 2026-03-23 | 3/150 |
|
|
[考研] 化工專碩求調(diào)劑 +3 | question挽風(fēng) 2026-03-24 | 3/150 |
|
|
[考研] 284求調(diào)劑 +3 | yanzhixue111 2026-03-23 | 6/300 |
|