如何为 Julia 数组建立索引

gen*_*guy 6 arrays indexing julia

我无法理解 Julia 中看似不一致的行为。

X = reshape(1:100, 10, 10)
b = [1 5 9]
X[2, :][b] # returns the correct array
X[2, :][1 5 9] # throws an error
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么使用变量b可以索引数组,但当我自己编写索引时却不行?

Chr*_*kas 10

由于x = X[2,:]是一个向量,我们可以将示例简化为仅讨论向量上的索引行为。

x[v]其中v是整数集合,返回 的子集x。因此x[(1,5,9)]x[[1,5,9]]正在使用该getindex(x::Vector,i::AbstractArray)调度。

请注意,这x[[1 5 9]]是有效的,因为它v = [1 5 9]生成了v一个行向量。这是有效的语法,但x[1 5 9]甚至不是有效的 Julia 语法。该语法还有其他含义:

v = Float64[1 5 9]
Run Code Online (Sandbox Code Playgroud)

返回元素类型为 的行向量Float64

  • @Liso:尝试 `Base.typed_hcat(::AbstractArray, ::Int...) = "不要这样做!"`。 (2认同)

gen*_*guy 3

我已经想出了一个解决办法。

X[2, :][1 5 9]我应该写而不是写x[2, :][[1 5 9]]

我相信当我们想象第二次在二维上建立索引时这是有道理的。这使得编写更复杂的索引成为可能,例如X[2:4, :][[1 3],[1 3]]