gpt4 book ai didi

arrays - 在Mathematica中使用数组和表函数。什么时候最好

转载 作者:行者123 更新时间:2023-12-03 11:22:01 28 4
gpt4 key购买 nike

我主要是mathematica中的Table函数用户。但是,我注意到在几个示例中,我使用Array而不是Table表示相同的结果,它的运行速度明显更快,尤其是当表的尺寸变大时。

所以我的问题是:当执行速度是主要考虑因素时,何时使用表最合适?

是什么解释了这种差异?

我的猜测是,由于数组假设列表中各项之间存在功能关系,因此可以更有效地存储它们,因此使用较少的内存,从而便于存储和后续处理?

这是怎么回事?

最佳答案

Array相比,Table没有性能优势。它们之间的差异使一个人胜于另一个人。

编辑一些人注意到Table在多维数组上比较慢。他们都使用变量来保存表的大小。 Table具有HoldAll属性,并且仅自动评估最外面的插入范围。由于内部迭代器保持未评估状态,因此表的元素无法编译。使用显式数字或With并导致自动编译:

In[2]:= With[{b = 10^4, c = 10^4},
{Timing@(#[[1, 1]] &[ar = Array[(# + #2) &, {b, c}]]) ,
Timing@(#[[1, 1]] &[ta = Table[(i + j), {i, b}, {j, c}]])}
]

Out[2]= {{4.93, 2}, {4.742, 2}}

In[3]:= Attributes[Table]

Out[3]= {HoldAll, Protected}
Array允许您构建函数值数组,就像 Table一样多。他们采取不同的论点。 Array具有一个功能:
In[34]:= Array[Function[{i, j}, a[i, j]], {3, 3}]

Out[34]= {{a[1, 1], a[1, 2], a[1, 3]}, {a[2, 1], a[2, 2],
a[2, 3]}, {a[3, 1], a[3, 2], a[3, 3]}}

而表采用显式形式:
In[35]:= Table[a[i, j], {i, 3}, {j, 3}]

Out[35]= {{a[1, 1], a[1, 2], a[1, 3]}, {a[2, 1], a[2, 2],
a[2, 3]}, {a[3, 1], a[3, 2], a[3, 3]}}
Array仅可以遍历常规数组,而 Table可以对列表进行任意迭代:
In[36]:= Table[a[i, j], {i, {2, 3, 5, 7, 11}}, {j, {13, 17, 19}}]

Out[36]= {{a[2, 13], a[2, 17], a[2, 19]}, {a[3, 13], a[3, 17],
a[3, 19]}, {a[5, 13], a[5, 17], a[5, 19]}, {a[7, 13], a[7, 17],
a[7, 19]}, {a[11, 13], a[11, 17], a[11, 19]}}

有时 Array可能更简洁。比较乘法表:
In[37]:= Array[Times, {5, 5}]

Out[37]= {{1, 2, 3, 4, 5}, {2, 4, 6, 8, 10}, {3, 6, 9, 12, 15}, {4, 8,
12, 16, 20}, {5, 10, 15, 20, 25}}


In[38]:= Table[i j, {i, 5}, {j, 5}]

Out[38]= {{1, 2, 3, 4, 5}, {2, 4, 6, 8, 10}, {3, 6, 9, 12, 15}, {4, 8,
12, 16, 20}, {5, 10, 15, 20, 25}}
Array允许一个人用任意头构建表达式,而不仅仅是列表:
In[39]:= Array[a, {3, 3}, {1, 1}, h]

Out[39]= h[h[a[1, 1], a[1, 2], a[1, 3]], h[a[2, 1], a[2, 2], a[2, 3]],
h[a[3, 1], a[3, 2], a[3, 3]]]

默认情况下,头 h选择为 List,从而创建常规数组。表没有这种灵活性。

关于arrays - 在Mathematica中使用数组和表函数。什么时候最好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764774/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com