Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Julia中查找数组中多个元素的位置_Arrays_Julia - Fatal编程技术网

Arrays 如何在Julia中查找数组中多个元素的位置

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中数组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}
这是错误的。 然后

下面的结果是错误的

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