在像 Matlab 这样的一些高级语言中,您可以使用“逻辑索引”来选择数组中的整组条目进行操作。
我了解什么是逻辑索引以及如何使用它。
相反,我要问:
- 它是如何运作的(“幕后”)?
- 它不会归结为一个 for 循环吗?
- 如果是这样,为什么它比 for 循环快这么多?
最佳答案
解释型语言可以被认为是在模拟核心上运行的汇编程序的变体。他们有堆栈和命令,它们以类似于汇编器的方式工作,但实际上并不是汇编器。它们是虚拟机。
for 循环可以被认为是告诉系统,设置一个值,运行一系列任务,完成后返回并检查该值。如果它没有达到阈值,则按照规定的方式进行更改,然后重复这些任务并返回。在汇编程序中,你运行得很快,但在“虚拟机”中就没那么快了。考虑这个链接 13:50 到 15:30 之间的演示:( link )
这意味着看似 for 循环的内容实际上并不是 for 循环。它是操作系统中断和虚拟化内存。它是后台病毒扫描和 megasloth bloatware。
如果您有一个虚拟系统,您能否创建一条不使用虚拟化 for 循环的内存寻址捷径,这样效率相当高? MatLab 试图主攻数据处理,因此它必须有非常有效的方法来在其虚拟机中存储、排序和选择数据。
MathWorks 不会向公众公开这方面的详细信息。如果它有一个好主意,那么他们不希望它在 Python 和明天的 R 中实现。如果它有一个平庸的想法,那么他们不想在明天的执行中被 Python 和 R 打败。无论哪种方式,在没有 NDA 的情况下让公众可以访问该特定方法的具体细节 - 这对他们来说可能是一个失败的提议。
底线:
- 它不是真正的“for”,即使是 for 循环,因为它是虚拟运行的
- 他们正在开放一些数据处理的内部结构以提高可用性
- 由于负面的业务后果,他们不太可能披露实际代码
值得注意的是,矢量化代码在做同样的事情时可以胜过 for 循环。这意味着他们可能会将更多的内部机制应用于执行“任务序列”以提高性能。
关于matlab - 逻辑索引如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21944149/