罗兰在MATLAB的艺术gydF4y2Ba

把想法变成MATLABgydF4y2Ba

请注意gydF4y2Ba

罗兰在MATLAB的艺术gydF4y2Ba已经存档,不会被更新。gydF4y2Ba

隐式膨胀性能的重要性gydF4y2Ba

有时人们说他们喜欢使用MATLAB,因为很容易表达自己的数学思想。有时有后续,然后切换到另一种语言的性能。而MATLAB的早期历史上,有时是有益的,它不是那么明显。举的例子gydF4y2Ba隐式的扩张gydF4y2Ba(也gydF4y2Ba在这里gydF4y2Ba)。gydF4y2Ba

最大化的好处隐式扩张,最好是如果你有一个更复杂,计算昂贵的MATLAB与表达式同时最小化需要临时数组。MATLAB可以利用粗粒并行。但它也取决于你的电脑和您正在使用的数组大小。和值得思考的代码维护(未来)和其复杂性/简单。gydF4y2Ba

内容gydF4y2Ba

示范gydF4y2Ba

这是演示的这个简单的想法。我测试的等效数值算法去除任何数组和扩展它的意思。下面是三个等价实现MATLAB,可能临时数组中最后一个嵌入到一个单行利用最神奇的可能。第一个使用命名良好gydF4y2BabsxfungydF4y2Ba函数。第二个作为第一个使用相同的步骤,但是使用隐式扩张。第三个方法结合的一些步骤有更少的整体语句。我打电话这个聪明。gydF4y2Ba

n = (300、1000、3000、10000);任何时候= 0(长度(n), 4);gydF4y2Ba%任何时候=表(“大小”,(长度(n), 4)……gydF4y2Ba%”VariableNames”,“n”、“bsxfun”、“隐”,“智能”));gydF4y2Ba为gydF4y2Bai = 1:长度(n)运行时= testRemoveMeanAndScale (n (i));:任何时候(我)= (n (i),运行时);gydF4y2Ba结束gydF4y2Ba格式gydF4y2Ba短gydF4y2BaggydF4y2Ba全时工作的= array2table(任何时候,gydF4y2Ba“VariableNames”gydF4y2Ba,(gydF4y2Ba“n”gydF4y2Ba,gydF4y2Ba“bsxfun”gydF4y2Ba,gydF4y2Ba“隐式”gydF4y2Ba,gydF4y2Ba“智能”gydF4y2Ba])gydF4y2Ba
全时工作的= 4×4表n bsxfun隐式智能_____ __________ __________ __________ 300 0.00024632 0.00014821 7.5306 e-05 1000 0.00322 0.0036559 0.0027499 3000 0.3469 0.38712 0.33361 0.030063 0.036868 0.027908 10000gydF4y2Ba

的想法gydF4y2Ba

您可以看到,时间并不完全一致。数组变大,似乎始终优于其他的智能算法。隐式扩张和gydF4y2BabsxfungydF4y2Ba通常在票面除了小矩阵大小,也许在额外的函数调用成本足够明显。gydF4y2Ba

你喜欢哪些代码,为什么?gydF4y2Ba

我想知道哪些代码你会喜欢,我很想听听你的理由。请让我知道gydF4y2Ba在这里gydF4y2Ba。gydF4y2Ba

% %测试函数gydF4y2Ba函数gydF4y2Ba运行时= testRemoveMeanAndScale (n)gydF4y2Ba%这个函数测试3算法我们希望比较w.r.t.速度。gydF4y2Barng (0);X =兰德(n);μ=兰德(1,n);σ=兰迪([0,1],1 n);运行时间(1)= (@ ()bsxfunRemoveMeanAndScale (X,μ、σ));运行时间(2)= (@ ()implicitExpansionRemoveMeanAndScale (X,μ、σ));运行时间(3)= (@ ()smartRemoveMeanAndScale (X,μ、σ));gydF4y2Ba结束gydF4y2Ba% testRemoveMeanAndScalegydF4y2Ba函数gydF4y2BaX = bsxfunRemoveMeanAndScale (X,μ、σ)gydF4y2Ba使用bsxfun %实现gydF4y2BaX = bsxfun (@minus, X,μ);西格玛(σ= = 0)= 1;X = bsxfun (@rdivide X,σ);gydF4y2Ba结束gydF4y2Ba% bsxfunRemoveMeanAndScalegydF4y2Ba函数gydF4y2BaX = implicitExpansionRemoveMeanAndScale (X,μ、σ)gydF4y2Ba%使用隐式扩张gydF4y2BaX = X -μ;西格玛(σ= = 0)= 1;X = X。/σ;gydF4y2Ba结束gydF4y2Ba% implicitExpansionRemoveMeanAndScalegydF4y2Ba函数gydF4y2BaX = smartRemoveMeanAndScale (X,μ、σ)gydF4y2Ba%推荐隐式实现扩张gydF4y2Ba西格玛(σ= = 0)= 1;X = (X -μ)。/σ;gydF4y2Ba结束gydF4y2Ba% smartRemoveMeanAndScalegydF4y2Ba




发表与MATLAB®R2019bgydF4y2Ba


评论gydF4y2Ba

留下你的评论,请点击gydF4y2Ba在这里gydF4y2BaMathWorks账户登录或创建一个新的。gydF4y2Ba