【发布时间】:2011-08-11 12:12:35
【问题描述】:
我主要是数学中的表函数用户。但是我注意到,在我使用 Array 而不是 Table 来表达相同结果的几个示例中,它的运行速度明显更快,尤其是随着 table 的维度越来越大。
所以我的问题是:当执行速度是主要关注点时,什么时候最适合使用表?
什么解释了这种差异?
我的猜测是,由于数组假设列表中的项目之间存在函数关系,因此它存储它们的效率更高,因此使用的内存更少,从而便于存储和后续处理?
这是怎么回事?
【问题讨论】:
-
@Leonid @Sasha 如果菲尔不介意,我想在这里添加一个相关问题。选择
ConstantArray而不是Array或Table的唯一原因仅仅是执行速度吗?自从引入 ConstantArray 以来,我一直想知道它的用途。我的意思是,它甚至不能节省你的打字时间。ConstantArray[1, 10^7]比Table[1, {10^7}]长,而且填表速度如此之快,以至于差异(当作为一个因素给出时是相当大的)并不是很有趣。至少不适用于符号(因子 2)和整数(10)。然而,对于复合物,它变得有趣 (50)。 -
@belisarius 我的意思是说。
-
@Sjoerd 除了加速之外,
ConstantArray的结果会自动打包为数字常量。对于数字常量,很可能您希望将其打包,因此您必须添加时间来打包以其他方式产生的结果(通过Table或Array),再加上方便 - 使用ConstantArray你没有考虑一下。 -
@Leonid 谢谢,不知道。
-
@Sjoerd 我必须补充一点,
Array和Table(后者仅在一维中)将打包可编译的函数,以及大于SystemOptions->"CompileOptions"中相应设置的元素数量(“ArrayCompileLength”和“TableCompileLength”)。因此,打包的区别主要是针对小型列表,除非将上述选项重置为更大的值。但是,IMO,它仍然增加了一些便利性,而且将数字转换为像Array[1&,{100}]中的常量纯函数看起来有点不自然,只是为了适应Array的语法,它需要一个函数。
标签: arrays wolfram-mathematica