设计方法:过载与开关?

2024-03-18

关于封装设计的性能和可扩展性,最好是:

  1. …“重载”函数名称(让 Mathematica 根据模式/条件/测试以及系统对定义的排序方式来确定要使用哪个版本)?
  2. ...或者使用 Switch[] (或类似命令)构建单个函数来直接求值?

Mathematica 的表达能力经常让我对诸如此类的愚蠢(?)问题感到困惑。


这是一个广泛的问题,但我会借此机会给出一个广泛的答案......

我主张人们应该拥抱编程语言的主要范式,而不是试图与之抗争或编写遵循另一种语言的习惯用法的代码。 Mathematica 是围绕模式匹配的概念构建的,因此,恕我直言,我们在尝试表达自己时应该始终首先考虑模式匹配。遵循这一原则,我更倾向于定义而不是Switch.

关于性能问题,在比较 Mathematica 结构时越来越强调微基准,这让我越来越烦恼。虽然了解与构造相关的成本很有价值,但我们应该留意 Knuth(或者是 Hoare?):“我们应该忘记小的效率,比如说 97% 的时间:过早的优化是万恶之源”。 “邪恶”是程序中可读性的丧失,为了提高效率,使用一些晦涩或间接的方法来达到效果。这是我的绩效清单:

  1. 性能有问题吗?如果没有,则跳过清单的其余部分。

  2. 性能瓶颈在哪里?分析器在这里会有所帮助,但通常可以通过检查或一些打印语句轻松找到瓶颈。然后...

  3. 算法效率低下吗?非常常见的是:是否存在可以线性化或通过索引方案帮助解决的双重嵌套循环?

  4. 好的,算法很好,所以我想是时候进行微基准测试了。

我不知道我对 Mathematica 的使用是否不够雄心勃勃,但大多数时候我都没有完成第一步。然后#3 捕获了其余的大部分。在 Mathematica 中,我发现我通常只是欣喜若狂,因为我可以用少量代码执行一些雄心勃勃的任务 - 整体性能通常不会进入画面。

呃哦,我最好把肥皂盒收起来。对此感到抱歉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计方法:过载与开关? 的相关文章

随机推荐

  • Azure Python Web 应用内部服务器错误

    编辑 问题似乎是在我的应用程序中导入包 所有软件包都已正确安装 我可以在我的 wwwroot 中使用 kudu 看到它们 但是 当我将它们导入脚本中时 我收到 500 错误 最糟糕的是 只有当我以这种方式导入包时才会出现问题 from pa
  • Angelika Langer GenericsFAQ - 我可以像使用其他类型一样使用原始类型吗?

    我正在阅读以下文档阿格丽卡 兰格博士 http www angelikalanger com GenericsFAQ FAQSections ParameterizedTypes html Can 20I 20use 20a 20raw 2
  • 通过从另一个文件中逐行读取来加载属性文件

    我正在读取一个名为 abc txt 的文件 abc txt 的每一行都是一个属性文件 例如 label properties label ch properties label da properties label de properti
  • Android 12:从 targetSdkVersion 31 开始,Toast 消息被剪裁

    最近我的智能手机 Google Pixel 3 从Android 11更新到12 之后 我想调整我的应用程序传感器记录 http www braun home net michael android sensorrecording inde
  • 将文件从 Node js 传输到 dropbox,无需基于浏览器的 oauth 身份验证

    我正在运行一个来自heroku的基于nodejs express的api服务器并使用dropbox js https github com dropbox dropbox js图书馆 这是我想做的 用户点击特定的 API 端点并启动该流程
  • 如何在 C#(Windows Phone 7)中解析 JSON 数组值?

    我在 WP7 工作 我需要解析列表框中的 JSON 数组值 有人说 使用序列化器和反序列化器 但我不知道如何使用序列化器和反序列化器将这些值解析到组合框或列表框中 我建议使用JSON NET http json codeplex com 我
  • 列出来自 DBpedia 的国家

    尝试查询 DBpedia 以获取包含以下内容的所有国家 地区的列表dbo longName列出每个国家的财产和首都 但返回 0 个结果 看不出查询有什么问题 PREFIX dbo
  • 重音字符不显示

    我有一个要求 将电子邮件发送给用户 他可以直接回复该电子邮件 并且该电子邮件的内容将发布在他的帐户中 问题是当用户从电子邮件中发布内容时 重音字符无法正确显示 我使用发送电子邮件MailMessage class message BodyE
  • MX记录查找和检查

    我需要创建一个工具来检查域的实时 mx 记录是否符合预期 我们的一些员工在摆弄这些记录时遇到了问题 导致所有传入的邮件都被重定向到空白 现在我不会撒谎 我根本不是一个称职的程序员 我已经阅读了大约 40 页的 深入 Python 可以阅读和
  • 如何终止 java 上的远程 Eclipse 调试

    我正在远程调试一个java应用程序 它通常运行良好 然而 我正在编写新的代码 现在我到达一行 我想终止程序 但唯一可用的按钮是暂停和断开连接 当然 挂起不会终止 断开连接会停止调试 但会使远程应用程序处于任何状态 然后我必须重新启动它 有一
  • 将宽度和高度设置为 React-native 模式

    我无法使用配置模态高度和宽度style财产 还有其他方法可以设置模态高度和宽度吗
  • 如何在 ASP.NET MVC 3 中发布文件数组?

    我希望能够以一种形式发布多个文件 我想将这些文件作为文件数组传递 例如我想这样做
  • 查找与某个模式匹配的所有文件名

    我正在尝试找到一种方法来列出与此模式匹配的文件夹中的所有文件名 20131106XXXXX pdf 前缀是日期 内容和长度XXXX不同文件有所不同 我只关心 pdf 文件 任何人都可以建议一种方法来做到这一点吗 Try this list
  • 厨师兼顾客中途死亡

    最近 我们开始遇到厨师客户在跑步过程中死亡的问题 因为我们在通常进行得更快的跑步列表的各个部分上花费了更多的时间 我使用的是家庭 Wi Fi 而我的同事使用的是工作 Wi Fi 该 Wi Fi 本身也存在一些连接问题 如果在 Chef cl
  • Django Rest Framework - 序列化器中的字段级验证

    我有一个序列化器 我正在尝试添加字段级验证 我需要验证序列化的某些字符字段是否为空 以及布尔字段是 true 还是 false 我有这个序列化器 但即使 Ficha publicada 为 false 我也不会返回错误 class Publ
  • 取消注册已注册的 filewatcher 事件不起作用

    我想用powershell查看一个文件夹 我是PS初学者 当我启动脚本时 该脚本只能运行一次 但是 当我因为更改了一些脚本代码而必须再次重新启动脚本时 我收到此错误消息 Cannot subscribe to the specified e
  • 如何将选择字段的文本转换为图标?

    救救吧 伙计们 我的共享点页面中有一个选择字段 其中的选项如下 1 Go 2 Warning 3 Stop 现在 我希望它以图标而不是文本的形式出现在列表中 我有一个可用的 jquery 脚本 但需要很长时间才能搜索所有列表中包含的文本 而
  • 无法获取当前用户:没有可用的 RequestContext

    使用 xsuaa approuter 登录获取登录的用户对象时出现以下异常 User currentUser UserAccessor getCurrentUser 我要在不使用 GuiceFilter 的情况下获取 currentUser
  • 我可以使用 Python 为所有主流浏览器开发扩展吗?

    我可以用吗Python为所有主流浏览器开发扩展 如果不是 那么我需要了解哪些语言来开发扩展 Chrome Firefox Safari IE Opera 大多数扩展只是捆绑的 HTML CSS JS 和图像文件 以及一些元数据 你需要精通
  • 设计方法:过载与开关?

    关于封装设计的性能和可扩展性 最好是 重载 函数名称 让 Mathematica 根据模式 条件 测试以及系统对定义的排序方式来确定要使用哪个版本 或者使用 Switch 或类似命令 构建单个函数来直接求值 Mathematica 的表达能