| 24小時(shí)熱門版塊排行榜 |
| 6 | 1/1 | 返回列表 |
| 查看: 1113 | 回復(fù): 5 | |||
愛(ài)紅茶的貓木蟲(chóng) (小有名氣)
|
[求助]
MATLAB編程優(yōu)化問(wèn)題 已有2人參與
|
|
求助一個(gè)matlab編程的優(yōu)化問(wèn)題,類似霍夫變換(Hough Transform)的累加問(wèn)題。 一維向量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 問(wèn)題是matlab的for循環(huán)效率低下,如果m和n的值非常大的話(>10000),計(jì)算時(shí)間很長(zhǎng)。 在此求助matlab高手,能否使用矩陣實(shí)現(xiàn)的方法代替for循環(huán)來(lái)提高編程效率? 期待確實(shí)有幫助的應(yīng)助回帖 |
榮譽(yù)版主 (文壇精英)
![]() |
專家經(jīng)驗(yàn): +518 |
銅蟲(chóng) (初入文壇)
|
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)過(guò)試驗(yàn),D的元素有時(shí)候有數(shù)值誤差,但是都在1.0e-14量級(jí),稍微處理就行 |
木蟲(chóng) (小有名氣)
銅蟲(chóng) (初入文壇)
|
理解編程思想就不難理解那幾句話了,至于那些函數(shù)是什么意思可以查詢相關(guān)的說(shuō)明,這里將編程思想說(shuō)說(shuō)吧。 因?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)的元素后,加上其因該被訪問(wèn)的次數(shù)就行了。從而不必要反復(fù)用for循環(huán)。 下面幾行得到a,b中到底還有多少個(gè)不同元素, a=sort(a) %為什么要先排序是為了后面通過(guò)diff能求出不同元素的計(jì)數(shù),也就是a中不同元素應(yīng)該被訪問(wèn)的次數(shù)。 b=sort(b) [a,ida]=unique(a) %找出不同的元素,經(jīng)過(guò)這一步后a中就只含有不同元素了,不會(huì)有重復(fù)的。 [b,idb]=unique(b) 下面幾行是找出a,b不同元素出現(xiàn)的次數(shù),也就是訪問(wèn)的計(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)訪問(wèn)到。 D=counta'*countb 得到一個(gè)與B(a,b)同樣大小的矩陣,他們的對(duì)應(yīng)元(行被訪問(wèn)次數(shù)乘以列被訪問(wèn)次數(shù),就是其交叉點(diǎn)處總的訪問(wèn)次數(shù)) D(i,j)就是A(a(i),b(i))應(yīng)該被最終加上的數(shù)字,也就是你那兩個(gè)for循環(huán)中A(a(i),b(i))應(yīng)該被訪問(wèn)到的次數(shù)。 我也覺(jué)得很難用語(yǔ)言表達(dá)清楚,如果還是不明白你一步步用紙驗(yàn)算,就看出其中的奧秘了。 |
木蟲(chóng) (小有名氣)
| 6 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿吉林大學(xué)材料學(xué)碩321求調(diào)劑 +7 | Ymlll 2026-03-18 | 10/500 |
|
|---|---|---|---|---|
|
[考研] 0703化學(xué)調(diào)劑 +4 | 18889395102 2026-03-18 | 4/200 |
|
|
[考研] 0703化學(xué)調(diào)劑 +5 | pupcoco 2026-03-17 | 8/400 |
|
|
[考研] 346求調(diào)劑[0856] +3 | WayneLim327 2026-03-16 | 6/300 |
|
|
[考研] 本科鄭州大學(xué)物理學(xué)院,一志愿華科070200學(xué)碩,346求調(diào)劑 +4 | 我不是一根蔥 2026-03-18 | 4/200 |
|
|
[考研] 0703化學(xué)調(diào)劑 +8 | 妮妮ninicgb 2026-03-15 | 12/600 |
|
|
[考研] 材料與化工一志愿南昌大學(xué)327求調(diào)劑推薦 +8 | Ncdx123456 2026-03-13 | 9/450 |
|
|
[考研] 一志愿西南交大,求調(diào)劑 +4 | 材化逐夢(mèng)人 2026-03-18 | 4/200 |
|
|
[考研] 收復(fù)試調(diào)劑生 +4 | 雨后秋荷 2026-03-18 | 4/200 |
|
|
[考研] 331求調(diào)劑(0703有機(jī)化學(xué) +7 | ZY-05 2026-03-13 | 8/400 |
|
|
[考研] 070300化學(xué)319求調(diào)劑 +6 | 錦鯉0909 2026-03-17 | 6/300 |
|
|
[考研] 0703化學(xué)336分求調(diào)劑 +6 | zbzihdhd 2026-03-15 | 7/350 |
|
|
[考研] 277調(diào)劑 +5 | 自由煎餅果子 2026-03-16 | 6/300 |
|
|
[考研] 326求調(diào)劑 +5 | 上岸的小葡 2026-03-15 | 6/300 |
|
|
[考博] 26申博 +4 | 八6八68 2026-03-16 | 4/200 |
|
|
[考研] 一志愿南京大學(xué),080500材料科學(xué)與工程,調(diào)劑 +4 | Jy? 2026-03-16 | 4/200 |
|
|
[考研] 275求調(diào)劑 +4 | 太陽(yáng)花天天開(kāi)心 2026-03-16 | 4/200 |
|
|
[考研] 東南大學(xué)364求調(diào)劑 +5 | JasonYuiui 2026-03-15 | 5/250 |
|
|
[考研] 289求調(diào)劑 +4 | 這么名字咋樣 2026-03-14 | 6/300 |
|
|
[考研] 328求調(diào)劑 +3 | 5201314Lsy! 2026-03-13 | 6/300 |
|