Re: [運算] 多層for迴圈簡化 與 GPU加速
真不好意思,才隔一天就又上來問..
昨天問的東西其實是我要算的東西的第二步,原本他才是瓶頸,但是板上高手一下就解決
了,我現在想不用for處理第一步,也就是求出昨天的atot (m*n,k)
atot中的元素是用一個m*n二維座標(x,y)和三個一組的數字(a1,a2,a3)帶入一個函數
f(x,y,a1,a2,a3)求得,三個一組的數字共有k組,所以最後atot的維度是(m*n,k)
https://imgur.com/CTjyecs
程式上先用meshgrid建立座標,再產生k組數字
m=15;
n=19;
k=10000;
[X,Y]=meshgrid(1:m,1:n);
ini=randn(k,3);
為了方便起見這裡f就先用sin和多項式來舉例
f(x,y,a1,a2,a3)=sin(x+y^2+a1+a2^2+a3^3)
目前想了一個辦法是用arrayfun配上reshape
atotpr=arrayfun(@(x,y) sin(x+y^2+ini(:,1)+ini(:,2).^2+ini(:,3).^3),X,Y,'un',0);
atotmid=cell2mat(atotpr);
atot=reshape(atotmid,k,m*n);
這樣確實比用三層for loop快很多了,隨便試幾個m,n,k都快一個數量級以上,不過想知道
有沒有更好的方法。另外這樣寫gpu也沒有辦法算,matlab的gpu不接受non UniformOutput
,雖然說以目前的速度來看,gpu似乎也不是很有必要了....但還是希望能多學一點
感恩
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.253.151
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1513717470.A.F95.html
※ 編輯: Absolitude (140.114.253.151), 12/20/2017 05:06:43
推
12/20 07:50,
7年前
, 1F
12/20 07:50, 1F
→
12/20 07:51,
7年前
, 2F
12/20 07:51, 2F
→
12/20 07:52,
7年前
, 3F
12/20 07:52, 3F
推
12/20 07:58,
7年前
, 4F
12/20 07:58, 4F
→
12/20 22:11,
7年前
, 5F
12/20 22:11, 5F
→
12/20 22:12,
7年前
, 6F
12/20 22:12, 6F
→
12/20 22:12,
7年前
, 7F
12/20 22:12, 7F
推
12/22 16:13,
7年前
, 8F
12/22 16:13, 8F
推
12/22 20:02,
7年前
, 9F
12/22 20:02, 9F
→
12/22 20:03,
7年前
, 10F
12/22 20:03, 10F
→
12/24 01:31,
7年前
, 11F
12/24 01:31, 11F
→
12/24 02:19,
7年前
, 12F
12/24 02:19, 12F
→
12/24 15:06,
7年前
, 13F
12/24 15:06, 13F
→
12/24 15:06,
7年前
, 14F
12/24 15:06, 14F
→
12/24 15:06,
7年前
, 15F
12/24 15:06, 15F
→
12/24 15:06,
7年前
, 16F
12/24 15:06, 16F
→
12/24 15:07,
7年前
, 17F
12/24 15:07, 17F
推
12/24 18:23,
7年前
, 18F
12/24 18:23, 18F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章