Loren在Matlab的艺术上GydF4y2Ba

将想法转化为matlabGydF4y2Ba

隐性扩张性能的重要性GydF4y2Ba

有时人们声明他们喜欢使用matlab,因为它很容易表达他们的数学思想。有时,他们有一个可以切换到另一种性能的语言。虽然早期在Matlab的历史上,这有时有益,但这几天并不是那么明显。让我们参加这样的例子GydF4y2Ba隐式的扩张GydF4y2Ba(还GydF4y2Ba在这里GydF4y2Ba)。GydF4y2Ba

为了最大限度地提高隐式扩展的好处,最好是如果您对MATLAB有更复杂,计算昂贵的表达式,可以在最大限度地减少对临时阵列的需求的同时。然后,Matlab可以利用粗糙的谷物并行性。但它也取决于您的计算机和您使用的数组大小。它值得思考代码维护(对于未来)及其复杂性/简单性。GydF4y2Ba

内容GydF4y2Ba

示范GydF4y2Ba

这是这个简单的想法的演示。我正在测试等效的数字算法,以删除任何数组的均值并缩放它。下面是Matlab中的三个等效实现,最后一个将可能的临时数组嵌入一个单行中以利用最魔力。第一个用来命名GydF4y2BaBsxfun.GydF4y2Ba函数。第二个方法使用与第一个相同的步骤,但是使用了隐式扩展。第三种方法结合了其中的一些步骤,所以整体语句更少。我觉得这个很聪明。GydF4y2Ba

n = [300,1000,3000,10000];alltimes = zeros(长度(n),4);GydF4y2Ba%alltimes =表(“size”,[长度(n),4],...GydF4y2Ba%“variablenames”,[“n”,“bsxfun”,“隐式”,“smart”]);GydF4y2Ba为了GydF4y2Bai = 1:长度(n)runtimes = testremovemeanandscale(n(i));alltimes(i,:) = [n(i),runtimes];GydF4y2Ba结尾GydF4y2Ba格式GydF4y2Ba短GydF4y2BaGGydF4y2Ba全时工作的= array2table(任何时候,GydF4y2Ba“variablenames”GydF4y2Ba,[GydF4y2Ba“n”GydF4y2Ba那GydF4y2Ba“bsxfun”GydF4y2Ba那GydF4y2Ba“隐式”GydF4y2Ba那GydF4y2Ba“智能”GydF4y2Ba])GydF4y2Ba
alltimesT = 4×4 table n bsxfun隐式智能_____ __________ __________ __________ 300 0.00024632 0.00014821 7.5306e-05 1000 0.00322 0.0036559 0.0027499 3000 0.030063 0.036868 0.027908 10000 0.3469 0.38712 0.33361GydF4y2Ba

的想法GydF4y2Ba

您可以看到时间不是完全一致的。似乎随着数组的增大,智能算法的性能始终优于其他算法。隐式扩张和GydF4y2BaBsxfun.GydF4y2Ba除了小矩阵大小之外,通常是对PAR,其中额外的函数调用足够额外的额外额外值。GydF4y2Ba

您更喜欢哪种代码,为什么?GydF4y2Ba

我想知道你更喜欢哪种编码,我很想听听你的理由。请让我知道GydF4y2Ba在这里GydF4y2Ba。GydF4y2Ba

%%测试功能GydF4y2Ba功能GydF4y2Ba运行时= testremovemeanandscale(n)GydF4y2Ba这个函数测试我们希望比较的三种算法的运算速度。GydF4y2Barng (0);X =兰德(n);μ=兰德(1,n);Sigma = randi([0 1],1,n);runtime(1) = timeit(@()bsxfunRemoveMeanAndScale(X, mu, sigma));runtime(2) = timeit(@()implicitExpansionRemoveMeanAndScale(X, mu, sigma));runtime(3) = timeit(@()smartRemoveMeanAndScale(X, mu, sigma));GydF4y2Ba结尾GydF4y2Ba%testremovemeanandscale.GydF4y2Ba功能GydF4y2BaX = BSXFUNREMOVEMANANDSCALE(X,MU,SIGMA)GydF4y2Ba使用bsxfun实现%GydF4y2BaX = bsxfun(@minus, X, mu);西格玛(σ= = 0)= 1;X = bsxfun(@rdivide, X, sigma);GydF4y2Ba结尾GydF4y2Ba%bsxfunremovemeanandreal.GydF4y2Ba功能GydF4y2BaX = implicitExpansionRemoveMeanAndScale(X, mu, sigma)GydF4y2Ba%使用隐式扩展GydF4y2BaX = X -;西格玛(σ= = 0)= 1;X = X ./;GydF4y2Ba结尾GydF4y2Ba% implicitExpansionRemoveMeanAndScaleGydF4y2Ba功能GydF4y2Bax = smartremovemeanandscale(x,mu,sigma)GydF4y2Ba建议隐式展开实现GydF4y2Ba西格玛(σ= = 0)= 1;X = (X -)/σ;GydF4y2Ba结尾GydF4y2Ba% smartRemoveMeanAndScaleGydF4y2Ba




发布了MATLAB®R2019BGydF4y2Ba

|GydF4y2Ba

注释GydF4y2Ba

要留下评论,请点击GydF4y2Ba在这里GydF4y2Ba登录到您的MathWorks帐户或创建一个新帐户。GydF4y2Ba