Julia 返回1元素数组作为元素类型

Julia 返回1元素数组作为元素类型,julia,Julia,如果我创建一个整数向量 a = Vector(1:3) 我索引了一个元素,它有元素的类型 typeof(a[3]) Int64 但是如果我用一个range对象索引一个元素,它的类型是数组 typeof(a[3:3]) Vector{Int64} 如何确保在只有一个元素的情况下,返回的是元素而不是数组。原因是我想将索引向量发送到一个函数,并根据类型调用不同的方法。我不确定我是否正确理解了您的问题,但您是否正在查找eType 编辑:阅读@Miles Lucas的答案,我发现你的问题有不同的解释

如果我创建一个整数向量

a = Vector(1:3)
我索引了一个元素,它有元素的类型

typeof(a[3])
Int64
但是如果我用一个range对象索引一个元素,它的类型是数组

typeof(a[3:3])
Vector{Int64}

如何确保在只有一个元素的情况下,返回的是元素而不是数组。原因是我想将索引向量发送到一个函数,并根据类型调用不同的方法。

我不确定我是否正确理解了您的问题,但您是否正在查找eType

编辑:阅读@Miles Lucas的答案,我发现你的问题有不同的解释。在这种情况下,唯一有用的功能可能是:

julia> only(a[3])
3

julia> only(a[3:3])
3

请注意,如果索引范围大于1,则会出现此错误。

我不确定是否正确理解了您的问题,但您是否正在查找eType

编辑:阅读@Miles Lucas的答案,我发现你的问题有不同的解释。在这种情况下,唯一有用的功能可能是:

julia> only(a[3])
3

julia> only(a[3:3])
3
请注意,如果索引范围大于1,则会出现此错误。

为什么会发生这种情况? 所以问题是,当你调用[3] 你实际上是在给getindexa打电话,3 其签名为getindex::AbstractArray,::Integer。 您的第二个示例被分派到另一个函数,但是-getindex::AbstractArray,::UnitRange。这两个函数的行为是不同的——尽管它们都给出了我希望看到的结果

相比之下,python列表和numpy数组具有完全相同的行为,但是对于numpy来说工作起来更容易,因为numpy并没有为广播强制相同数量的维度

你能做什么? 第一个想法:使用长度进行条件分支

注意:如果您至少使用Julia 1.3,则可以使用onlya而不是[1]

第二个想法:如果以编程方式将索引编入向量,则可以检查这两个索引是否相等

i = # ... the first index
j = # ... the second index
return i == j ? func(a[i]) : func(a[i:j])
为什么会这样? 所以问题是,当你调用[3] 你实际上是在给getindexa打电话,3 其签名为getindex::AbstractArray,::Integer。 您的第二个示例被分派到另一个函数,但是-getindex::AbstractArray,::UnitRange。这两个函数的行为是不同的——尽管它们都给出了我希望看到的结果

相比之下,python列表和numpy数组具有完全相同的行为,但是对于numpy来说工作起来更容易,因为numpy并没有为广播强制相同数量的维度

你能做什么? 第一个想法:使用长度进行条件分支

注意:如果您至少使用Julia 1.3,则可以使用onlya而不是[1]

第二个想法:如果以编程方式将索引编入向量,则可以检查这两个索引是否相等

i = # ... the first index
j = # ... the second index
return i == j ? func(a[i]) : func(a[i:j])

你从哪里来的?它告诉我UndevarError:只是在版本1.3或1.4中没有定义编辑。我在版本1.3.1 2019-12-30中,它不工作。是的,我现在看到它是在版本1.4中引入的。如果你现在更新,你会得到新的1.4.1,这是刚刚发布的?它告诉我UndevarError:只是在版本1.3或1.4中没有定义编辑。我在版本1.3.1 2019-12-30中,它不工作。是的,我现在看到它是在版本1.4中引入的。如果您现在更新,您将获得刚刚发布的新1.4.1。