为什么不同方式定义的函数作用后的结果相同但占内存不同
mathematica吧
全部回复
仅看楼主
level 10
Loydman 楼主
f[x_ ] := x^2 + 1;
g = Compile[{x }, x^2 + 1];
h = #^2 + 1 &;
a = f /@ Range[10^5];
b = g /@ Range[10^5];
c = h /@ Range[10^5];
a == b == c
ByteCount /@ {a, b, c}
(*
True
{2400080, 800200, 800200}
*)
表面上a,b,c结果是相同的,但如果需要将a,b,c用于后续的计算,a与b,c计算时间会有明显的差别
Min[a]; // AbsoluteTiming
Min[b]; // AbsoluteTiming
Min[c]; // AbsoluteTiming
(*
{0.0005798, Null}
{0.0000589, Null}
{0.0000559, Null}
*)
这是什么原因
2024年08月04日 16点08分 1
level 14
变成Packed Array了吧,纯数值数组的一种内部优化。我记得有个手动转化的函数来着
2024年08月05日 01点08分 2
@ylbzzsqydzh_ 找到了,我想说的是Developer`ToPackedArray[小乖]
2024年08月05日 15点08分
1