gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中编写复合函数通常会做什么

转载 作者:行者123 更新时间:2023-12-01 09:35:34 27 4
gpt4 key购买 nike

如果我想执行以下操作:

getCH[pts_List] := Module[{t}, t = ConvexHull[pts]; Map[Part[pts, #] &, t]];

Map[Function[{x}, Part[#, x]], ConvexHull[#]]&

还有什么其他的写法?您通常如何提高速度和效率?

编辑

顺便说一句,我以一种通用的方式提出这个问题,而不是针对这个特定问题。有时我觉得在 mma 中的函数式编程方面缺乏思考的脑力。只是想用各种其他方式来扩展我的武器库来编写函数组合并学习分析它们的复杂性/效率。所以请添加类似的问题。

最佳答案

我不知道 ConvexHull 是什么,但我假设我理解了这个问题

    getCH[pts_]:=pts[[ConvexHull[pts]]]


getCH[pts_]:=Extract[pts, Transpose@{ConvexHull[pts]}]

如果出于某种原因您希望 pts 只出现一次,您总是可以使用 With、Module 或 Block。我认为最重要的是说我没有看到这样做的意义。 With, 用点列表有效地替换 pts 的每个出现。这似乎有点矫枉过正,但请随意写

     getCH[pts_]:=With[{p=pts},p[[ConvexHull[p]]]]

模块创建一个新变量。对于不需要为变量赋值的情况,它通常比 With 慢。换句话说,With 用于定义常量更快。我认为 Block 也比 Module 快(稍微),但它的动态作用域(相对于 Module 的词法作用域)使它有点奇怪。很多关于这些的话题。

我不认为有任何内置函数接受一个列表和一个函数或符号,并提取该列表上的元素,该列表由同一列表上的函数评估结果索引,如果那是您正在寻找的对于您的“通用”问题。当然,您可以轻松创建一个,然后在将来使用它。我认为对于这样一个简单的问题来说太过分了,但也许它是您的目标函数式编程

    ExtractIndexed[l_List, fun_]:=l[[fun[l]]]

getCH[pts_]:=ExtractIndexed[pts, ConvexHull]

关于wolfram-mathematica - 在 Mathematica 中编写复合函数通常会做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684959/

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