MATLAB';s基于周围代码的隐式广播优化?

MATLAB';s基于周围代码的隐式广播优化?,matlab,matrix,memory,memory-management,pre-allocation,Matlab,Matrix,Memory,Memory Management,Pre Allocation,在隐式数组创建方面给出了令人惊讶的结果: array1=5*兰特(496736,1); 阵列2=25*兰特(9286,1); 输出=零(numel(array1),numel(array2));%需要34GB内存 输出=零(numel(array1)、numel(array2),“逻辑”);%需要4.3GB内存 output=abs(bsxfun(@减号,array1',array2))来自的一些精彩提示:与使用bsxfun相比,隐式扩展提供了更快的执行速度、更好的内存使用和更好的代码可读性。我

在隐式数组创建方面给出了令人惊讶的结果:

array1=5*兰特(496736,1);
阵列2=25*兰特(9286,1);
输出=零(numel(array1),numel(array2));%需要34GB内存
输出=零(numel(array1)、numel(array2),“逻辑”);%需要4.3GB内存

output=abs(bsxfun(@减号,array1',array2))来自的一些精彩提示:与使用
bsxfun
相比,隐式扩展提供了更快的执行速度、更好的内存使用和更好的代码可读性。我猜,MathWorks把魔法放在了那里,当然,没有关于这个的文档。也许从外部到内部解析参数来预测正确的输出类型现在是一件事了!?希望一些非MathWorks的人能提供更多的信息。@HansHirse这确实是一个非常有趣的提示。然而,至于执行速度,我看不出有什么大的区别。I,差别很小,只有在小数组中才明显。这是一致的。我刚刚重复了R2019a中的测试,结果是相同的。JIT是否可能按元素计算复合语句?(我的意思是,
d=a+b+c
不是计算为
tmp=a+b;d=tmp+c
,而是计算为
d(I)=a(I)+b(I)+c(I)
?任何有能力测试这一点的人(例如最大内存使用量)?将阵列1修剪到其长度的四分之一允许在我的机器上执行代码,并且它不使用相同的RAM,大量RAM用于大量输出,更少的RAM用于逻辑输出。我猜元素智能理论是正确的。一些提示来自于。也许MATLAB选择了其他方法,如分割数据和逐块计算。