matlab parfor不能用,matlab中parfor函数
google中輸入matlab parfor,你將得到足夠多的資料來了解這是個什么東西,如果你耐心,建議去研究研究matlab
幫助中對parfor的說明。這里我只大概講一下parfor。parfor就是paralle+for,也就是并行的for循環(huán),怎么個并行法?我理解就是,matlab會弄出幾個虛擬的小pc,一個算i=1:30部分循環(huán),一個算i=50:80部分循環(huán),再來一個算i=90:120部分循環(huán),當然數(shù)字是我瞎編的,我是想說matlab將一個大循環(huán)分成小塊,然后這些小塊并行計算,最后再合在一起。這樣,有一個問題,因為普通的循環(huán)是從i=1算到i=100,一個接一個算,如果下一次循環(huán)要依賴上一次循環(huán)怎么辦?如果出現(xiàn)這種情況,那就不能用matlab的parfor了。用parfor的前提條件就是,循環(huán)的每次迭代獨立,不相互依賴。舉個簡單的例子,計算1+2+3...+100就可以用parfor,但是如果計算斐波那契數(shù)列的前100個數(shù)字,那就不能用parfor了。
parfor就先解釋到這里,其實它涉及到的東西遠不止這些,而且感覺很令人糾結,如果你的C++很好,那就直接用C++吧!如果你還是想用matlab做并行,那就可以繼續(xù)向下看看我的一些經(jīng)驗。
首先我是做圖像處理的,1000多個圖像,如果直接算可能要算上1天,所以我想用matlab的并行。我們都知道數(shù)字圖像可以看成矩陣,我們經(jīng)常用for循環(huán)里面再加一個for循環(huán)來處理,但是parfor循環(huán)不能嵌套。那么原來的
for i=1:N
for j=1:M
end
end
就必須改成
parfor i=1:N
for j=1:M
end
end
或者
for i=1:N
parfor j=1:M
end
end
但是,這都不是最好的方法,因為如果循環(huán)的次數(shù)太少,并行就顯現(xiàn)不出威力來,所以最好的方法是這樣:
for k=1:M*N
i=mod(k-1,M)+1 ?%行號
j=floor((k-1)/M)+1 ?%列號
end
要注意一點的是k是按照列來數(shù)的,也就是這樣
1 4 7
2 5 8
3 6 9
所以,行號和列號別算錯了。這樣其他代碼就可以不變了。
還需要注意的一點就是就是,如果對矩陣f的每個像素計算的點值要賦值給矩陣g。這個g要在循環(huán)外面聲明好,而且要固定大小,在parfor循環(huán)里面最好也是向量,而非矩陣。計算完成后再用vec2mat函數(shù)轉換為矩陣,這個函數(shù)之后,可能還需要個轉置才能得到你需要的結果。
總結
以上是生活随笔為你收集整理的matlab parfor不能用,matlab中parfor函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java常用类的方法,java常用类的使
- 下一篇: matlab 边界连续,matlab的边