gpt4 book ai didi

list - 使用 Mathematica 中的函数式编程计算列表中元素之间的百分比差异?

转载 作者:行者123 更新时间:2023-12-04 23:09:51 26 4
gpt4 key购买 nike

这源于相关讨论,How to subtract specific elements in a list using functional programming in Mathematica?

如何轻松计算列表中值之间的百分比差异?

链接的问题使用差异来轻松计算列表中连续元素之间的绝对差异。无论内置的差异函数使这个特定问题变得多么容易,它仍然留下了如何执行不同操作的问题。

正如我之前提到的,我现在希望计算百分比差异。给定一个元素列表,{value1, value2, ..., valueN} , 如何执行类似 (value2-value1)/value1 的操作说 list ?

我试图找到一种使用 Slot 的方法或 SlotSequence隔离特定元素,然后对它们应用自定义函数。这是执行此类操作的最有效方法吗(假设有一种方法可以隔离元素并对它们执行操作)?

最佳答案

有一些自然的方法可以做到这一点。

您可以使用 Partition 为“百分比减少”函数形成参数列表。 :

In[3]:= list = {a, b, c, d, e};

In[4]:= Partition[list, 2, 1]

Out[4]= {{a, b}, {b, c}, {c, d}, {d, e}}

那么您可以 Apply这些的功能:
In[6]:= f @@@ Partition[list, 2, 1]

Out[6]= {f[a, b], f[b, c], f[c, d], f[d, e]}

使用百分比减少函数:
In[7]:= PercentDecrease[a_, b_] := (b - a)/a

In[8]:= PercentDecrease @@@ Partition[list, 2, 1]

Out[8]= {(-a + b)/a, (-b + c)/b, (-c + d)/c, (-d + e)/d}

(通过查看 Apply 上的“更多信息”注释来了解 @@@。)

您可以使用 Most 代替分区和 Rest形成第一个和第二个参数的列表,然后使用 MapThread 将它们组合起来:
In[14]:= MapThread[PercentDecrease, {Most[list], Rest[list]}]

Out[14]= {(-a + b)/a, (-b + c)/b, (-c + d)/c, (-d + e)/d}

一种不同的方法是分两步形成您的运算(减法和除法),如下所示:
In[10]:= Differences[list] / Most[list]

Out[10]= {(-a + b)/a, (-b + c)/b, (-c + d)/c, (-d + e)/d}

除法运算 (/) threads过两份名单 Differences[list]Most[list ]。

关于list - 使用 Mathematica 中的函数式编程计算列表中元素之间的百分比差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217116/

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