Arrays 如何在Julia中查找数组中多个元素的位置
这是我在朱莉娅的代码。我想找到数组a中数组b元素的位置Arrays 如何在Julia中查找数组中多个元素的位置,arrays,julia,Arrays,Julia,这是我在朱莉娅的代码。我想找到数组a中数组b元素的位置 a = [2,4,1,3] b = [1,4] c=[] for i in 1:length(b) push!(c, findfirst(isequal(b[i]), a)); end println(c) 结果是[3,2]。没错。但我相信应该有一个更有效的方法。 我试过了 julia> findall(x -> x == b, a) 0-element Array{Int64,1} 这是错误的。 然后 或 下面的结
a = [2,4,1,3]
b = [1,4]
c=[]
for i in 1:length(b)
push!(c, findfirst(isequal(b[i]), a));
end
println(c)
结果是[3,2]。没错。但我相信应该有一个更有效的方法。
我试过了
julia> findall(x -> x == b, a)
0-element Array{Int64,1}
这是错误的。
然后
或
下面的结果是错误的
julia> findall(x -> x in b, a)
2-element Array{Int64,1}:
2
3
我认为它将“b”视为一个集合,而忽略了“b”中元素的顺序。我想要正确的序列[3,2]。
有人能帮我吗?
谢谢。您可以使用:
但是,不要害怕
for
-循环,就像在第一个示例中一样,它们非常可读,并且通常与indexin
indexin
之类的内置方法一样高效(如果不是更多的话),这可能是正确的解决方案,但是您尝试的可能是
julia> findfirst.(.==(b), (a,))
2-element Array{Int64,1}:
3
2
与
indexin
的区别在于,如果找到所有元素,它将返回一个数组{Int64,1}
,而indexin
将返回一个数组{Union{Nothing,Int64},1}
。您最初的解决方案非常像朱利安。但是您几乎不应该编写c=[]
,因为这会创建Any
的向量。改为写c=Int[]
。请注意a
很长而且b
包含的元素不止是几个,如果您对a
的元素进行排序,并将二进制搜索与searchsorted
一起使用,将更加高效。当然,在这个场景中,您可以缓冲位置索引以返回到原始索引。感谢您的快速响应和良好的回答。我测试了数组{Union{Nothing,Int64},1}的行为类似于数组{Int64,1}。很好,谢谢你,DNF。这是一个有趣的答案。
julia> findall(x -> x in b, a)
2-element Array{Int64,1}:
2
3
julia> a = [2,4,1,3]; b = [1,4];
julia> indexin(b, a)
2-element Array{Union{Nothing, Int64},1}:
3
2
julia> findfirst.(.==(b), (a,))
2-element Array{Int64,1}:
3
2