gpt4 book ai didi

julia - Julia 如何解释 10 :1?

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

我是一名长期专注于 R 的外籍人士,其中 : (冒号)运算符创建从第一个参数到第二个参数的整数序列:

1:10
# [1] 1 2 3 4 5 6 7 8 9 10
10:1
# [1] 10 9 8 7 6 5 4 3 2 1

注意到这在 Julia 中的工作方式相同,我遇到了一个错误:
1:10 .== 10:1

DimensionMismatch("arrays could not be broadcast to a common size")



因为:
10:1

输出
10:9

我很困惑这怎么会发生。似乎很自然不需要使用 10:-1:1 -- Julia 为什么这么想 10:9是对 10:1的正确解释?

最佳答案

Julia 不是 R。还有其他语言对冒号语法的解释与 Julia 类似。 MATLAB 对待 10:1作为一个空数组和 Python 的切片语法(虽然在其他方面有所不同)也将索引处理为 10:1作为一个空的选择。 Julia 选择对空整数范围进行归一化,使得 start 和 stop 之间的差异始终为 -1 ,所以它变成 10:9 .

所以我不认为对 10:1 有明确的解释。 .然而,在我看来,Julia 的解释有一些非常有益的论据:

  • 空范围 10:9用于表示 some APIs 中索引 9 和 10 之间的位置.
  • 范围是 Julia 和 for x in 1:10 的核心结构。绝对且明确地必须与等效的 C 循环一样快。因为语法 x:y总是加一(永远不会是负一),Julia(和 LLVM)可以在编译 for 循环时利用这个常量来实现进一步的优化。使这不是恒定的 --- 或更糟的是,在 UnitRange 之间动态切换和 StepRange取决于端点的值会阻碍这种优化或类型不稳定。
  • 就我个人而言,我发现 R 的解释与您发现 Julia 的解释一样令人惊讶。我认为需要明确表示您想要一个步骤 -1在可读性和错误预防方面都有优势。但我承认,我对先前语言的经验和你的一样有偏见。
  • 关于julia - Julia 如何解释 10 :1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42965709/

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