| 5 | 1/1 | 返回列表 |
| 查看: 1116 | 回復(fù): 5 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | |||
愛紅茶的貓木蟲 (小有名氣)
|
[求助]
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)助回帖 |
銅蟲 (初入文壇)
|
理解編程思想就不難理解那幾句話了,至于那些函數(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á)清楚,如果還是不明白你一步步用紙驗算,就看出其中的奧秘了。 |
榮譽版主 (文壇精英)
![]() |
專家經(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量級,稍微處理就行 |
木蟲 (小有名氣)
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿天津大學(xué)化學(xué)工藝專業(yè)(081702)315分求調(diào)劑 +12 | yangfz 2026-03-17 | 12/600 |
|
|---|---|---|---|---|
|
[考研] 材料專碩英一數(shù)二306 +7 | z1z2z3879 2026-03-18 | 7/350 |
|
|
[考研] 一志愿南昌大學(xué),327分,材料與化工085600 +9 | Ncdx123456 2026-03-19 | 9/450 |
|
|
[考研] 考研調(diào)劑求學(xué)校推薦 +3 | 伯樂29 2026-03-18 | 5/250 |
|
|
[考研] 求調(diào)劑,一志愿:南京航空航天大學(xué)大學(xué) ,080500材料科學(xué)與工程學(xué)碩,總分289分 +4 | @taotao 2026-03-19 | 4/200 |
|
|
[考研] 086500 325 求調(diào)劑 +3 | 領(lǐng)帶小熊 2026-03-19 | 3/150 |
|
|
[考博] 招收博士1-2人 +3 | QGZDSYS 2026-03-18 | 3/150 |
|
|
[考研] 085600材料與化工求調(diào)劑 +6 | 緒幸與子 2026-03-17 | 6/300 |
|
|
[考研] 311求調(diào)劑 +11 | 冬十三 2026-03-15 | 12/600 |
|
|
[考研] 生物學(xué)071000 329分求調(diào)劑 +3 | 我愛生物生物愛?/a> 2026-03-17 | 3/150 |
|
|
[考研] 277調(diào)劑 +5 | 自由煎餅果子 2026-03-16 | 6/300 |
|
|
[考研] 268求調(diào)劑 +8 | 一定有學(xué)上- 2026-03-14 | 9/450 |
|
|
[考研] 材料專碩326求調(diào)劑 +6 | 墨煜姒莘 2026-03-15 | 7/350 |
|
|
[考研] 材料工程專碩274一志愿211求調(diào)劑 +6 | 薛云鵬 2026-03-15 | 6/300 |
|
|
[考研] 一志愿,福州大學(xué)材料專碩339分求調(diào)劑 +3 | 木子momo青爭 2026-03-15 | 3/150 |
|
|
[考研] 318求調(diào)劑 +3 | Yanyali 2026-03-15 | 3/150 |
|
|
[考研] 277材料科學(xué)與工程080500求調(diào)劑 +3 | 自由煎餅果子 2026-03-16 | 3/150 |
|
|
[考研] 326求調(diào)劑 +3 | mlpqaz03 2026-03-15 | 3/150 |
|
|
[考研] 求老師收留調(diào)劑 +4 | jiang姜66 2026-03-14 | 5/250 |
|
|
[考研] 289求調(diào)劑 +4 | 這么名字咋樣 2026-03-14 | 6/300 |
|