逻辑索引如何工作?

cmo*_*cmo 7 matlab

在某些高级语言(如Matlab)中,您可以使用"逻辑索引"来选择数组中的整个条目集进行操作.

我理解逻辑索引什么以及如何使用它.

相反,我问:

  • 它是如何工作的("幕后")?
  • 它不仅仅归结为for-loop吗?
  • 如果是这样,为什么它比循环更快?

Eng*_*ica 3

解释语言可以被认为是在模拟核心上运行的汇编程序的变体。它们的堆栈和命令以类似于汇编器的方式工作,但实际上并不是汇编器。它们是虚拟机。

for 循环可以被认为是告诉系统,设置一个值,运行一系列任务,完成后返回并检查该值。如果没有达到阈值,则按照规定的方式进行更改,然后重复这些任务然后再回来。在汇编程序中,你运行得很快,但在“VM”中则不然。考虑一下此链接 13:50 到 15:30 之间的演示:(链接)

这意味着看似 for 循环,实际上并不是 for 循环。它是操作系统中断和虚拟化内存。这是后台的病毒扫描和巨型树懒膨胀软件。

如果您有一个虚拟系统,您能否制定一个不使用虚拟化 for 循环的寻址内存的快捷方式,并且效率相当高?MatLab 试图主攻数据处理,因此它必须在虚拟机中拥有非常有效的存储、排序和选择数据的方法。

MathWorks 不会向公众公开此细节。如果它有一个好主意,那么他们不希望它在 Python 和 R 中实现。如果它有一个平庸的想法,那么他们不想明天在执行中被 Python 和 R 击败。不管怎样,在没有保密协议的情况下向公众提供这种特定方法的具体细节——对他们来说这可能是一个失败的提议。

底线:

  • 它不是真正的“for”,即使对于 for 循环也是如此,因为它实际上运行
  • 他们正在开放数据处理的一些内部机制以提高可用性
  • 由于负面的商业后果,他们不太可能披露实际代码

值得注意的是,在执行相同的操作时,矢量化代码的性能优于 for 循环。这意味着他们可能会应用更多的内部机制来执行“任务序列”,以提高性能。