我无法理解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
可以为数组编制索引,但是当我自己编写索引时却没有?
答案 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]]