Arrayfun With Gpuarray

動機 當我們需要把矩陣中的每一個元素都送進一個實數到實數的函數時,應該避免使用 for loop。我們可以使用簡單的技巧來達到我們的目的,例如: (x .^ 2) .* double(x > 0) 運算時 MATLAB 會做平行化的動作,但這樣的方法不是很理想。 MATLAB 提供了 arrayfun,我們可以定義單變數的實數函數,並且讓 MATLAB 改成矩陣函數,其中矩陣的每一個元素都是藉由帶入單變數實數函數得來,這樣可以使程式碼更容易閱讀,速度似乎也比較快。 另外numpy也有類似的方法 使用範例 定義函數 function y = fun(x) if x > 0 y = x^2; else y = 0; end 主程式 x = randn(1000, 1000, 'gpuArray'); f = @() (x .^ 2) .* double(x > 0); g = @() arrayfun(@fun, x); [timeit(f), timeit(g)] 確認兩個函數產生的結果是一樣的 norm((x .^ 2) .* double(x > 0) - arrayfun(@fun, x), 'fro') Reference https://www....

1 分鐘