Julia中子阵索引的获取 vec = [[1, 2, 3], [4, 5, 6]]
我想获取元素Julia中子阵索引的获取 vec = [[1, 2, 3], [4, 5, 6]],julia,Julia,我想获取元素[4,5,6]的索引,但是我不能使用getindex(),执行以下代码: getindex(vec, [1, 2, 3]) 给出: BoundsError: attempt to access 2-element Array{Array{Int64,1},1} at index [[1, 2, 3]] 因此,我想知道是否有任何有效的内置方法来实现这一点。当然,我可以将这个向量数组映射到另一个数字数组中,并在新的数字数组中进行搜索,但这并不是我所期望的解决方案 第二个问题是,我如何
[4,5,6]
的索引,但是我不能使用getindex()
,执行以下代码:
getindex(vec, [1, 2, 3])
给出:
BoundsError: attempt to access 2-element Array{Array{Int64,1},1} at index [[1, 2, 3]]
因此,我想知道是否有任何有效的内置方法来实现这一点。当然,我可以将这个向量数组映射到另一个数字数组中,并在新的数字数组中进行搜索,但这并不是我所期望的解决方案
第二个问题是,我如何更多地了解Julia中的搜索方法及其性能。我猜搜索的理论速度就像
\sqrt(N)
一样,但是根据特定的方法,实际的代码时间可能会有很大的不同。从函数的名称判断,您可能会被误导:getindex
检索存储在索引中的值
如果要查找数组中某个对象的索引,可以使用find*方法findfirst
,findall
julia> vec=[[1,2,3],[4,5,6]]
2-element Array{Array{Int64,1},1}:
[1, 2, 3]
[4, 5, 6]
julia> i = findfirst(x->x==[4,5,6],vec)
2
julia> vec[i]
3-element Array{Int64,1}:
4
5
6
关于你的第二个问题:
最好让自己了解一般的搜索/排序算法(例如),因为性能更多地取决于所选择的算法,而不是特定于语言的实现。例如,时间复杂度可能非常不同(O(n),O(log(n),…)。我认为您误解了
getindex
的功能。它是由[]
调用的函数,因此
julia> getindex(vec, 2)
3-element Array{Int64,1}:
4
5
6
Julia中的所有搜索(或“查找”)方法都将函数作为其第一个参数,并查找函数计算结果为true
的位置。要查找特定元素,请使用isequal
或==
(它们是等效的):
我们相同的答案交叉张贴:-)
julia> findall(==([1,2,3]), vec)
1-element Array{Int64,1}:
1