如何索引Julia数组

时间:2017-11-06 03:14:32

标签: 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

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

2 个答案:

答案 0 :(得分:4)

由于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]

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

答案 1 :(得分:2)

我找到了解决方案。

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

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