gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中映射两个参数函数

转载 作者:行者123 更新时间:2023-12-04 00:04:52 25 4
gpt4 key购买 nike

我要存档:

Map2[f,{a,b,c,d}]
{f[a,b], f[b,c], f[c,d]}
但出于某种原因,我只能想到迭代方法。
什么是功能方式?
编辑:
使用这个,是生成图形示例。如果给出数字列表,则以下生成其含义的图形,依次访问所有节点。
例如:
Map2 = # @@@ Partition[#2, 2, 1] &;
MG[elems_] := Graph[Map2[DirectedEdge, elems]]
nrs = RandomInteger[{1, 15}, 20]
MG[nrs]
{10,13,9,7,13,3,5,1,15,10,15,6,14,3,1,2,11,4,8,5}
径向布局:
enter image description here

最佳答案

最简单的:

Map2 = # @@@ Partition[#2, 2, 1] &;

或者,可能使用较少的内存,但运行速度较慢:
Map2[f_, lst_] := Developer`PartitionMap[f @@ # &, lst, 2, 1]

另外,请注意 Differences Accumulate , 相关。

其他方式:
Inner[#, Most@#2, Rest@#2, List] &

请注意,在这个 List可能是不同的功能。
MapThread[#, {Most@#2, Rest@#2}] &

Most@MapThread[#, {#2, RotateLeft@#2}] &

Rest@MapThread[#, {RotateRight@#2, #2}] &

Table[# @@ #2[[i ;; i + 1]], {i, Length@#2 - 1}] &

现在,时间。我会利用 Timo's timeAvg .
f1 = # @@@ Partition[#2, 2, 1] &;
f2[f_, lst_] := Developer`PartitionMap[f @@ # &, lst, 2, 1]
f3 = Inner[#, Most@#2, Rest@#2, List] &;
f4 = MapThread[#, {Most@#2, Rest@#2}] &;
f5 = Most@MapThread[#, {#2, RotateLeft@#2}] &;
f6 = Table[# @@ #2[[i ;; i + 1]], {i, Length@#2 - 1}] &;

timings =
Table[
list = RandomReal[99, 10^i];
func = Plus;
timeAvg[#[func, list]] & /@ {f1, f2, f3, f4, f5, f6},
{i, 6}
];

TableForm[timings,
TableHeadings -> {10^Range@6, {"f1", "f2", "f3", "f4", "f5", "f6"}}]

ListLogPlot[timings\[Transpose], Joined -> True]

enter image description here

enter image description here

表格左侧的数字是每次运行的实数列表的长度。

请注意,该图是对数的。

以下是处理最长列表 (1,000,000) 时使用的内存字节数:

enter image description here

完成上面的计时后,我发现我可以制作 f6通过消除 Apply 更快( @@ )。它现在显然是较长列表中最快的。我不会将它添加到上表中,因为它已经足够宽了,但这里是函数及其时序:
f7 = Table[#2[[i]] ~#~ #2[[i + 1]], {i, Length@#2 - 1}] &;

enter image description here

关于wolfram-mathematica - 在 Mathematica 中映射两个参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168053/

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