gpt4 book ai didi

r - Julia 版本的 R 的比赛?

转载 作者:行者123 更新时间:2023-12-04 13:48:52 24 4
gpt4 key购买 nike

来自 R 的帮助页面 match() :

描述:

‘match’ returns a vector of the positions of (first) matches of its first argument in its second.



也就是说,我可以给出两个向量, match(v1,v2)返回一个向量,其中第 i 个元素是 v1[i] 的索引出现在 v2 .

Julia 有没有类似的功能?我找不到它了。

最佳答案

听起来您正在寻找 indexin (就像搜索素材一样,这也被 Matlab 称为 ismember)。它略有不同:它返回一个向量,其中第 i 个元素是 v1[i] 的最后一个索引。出现在 v2 .

julia> v1 = [8,6,7,11]; v2 = -10:10;
idxs = indexin(v1, v2)
4-element Array{Int64,1}:
19
17
18
0

它为 v1 中元素的索引返回零没有出现在 v2 中.所以你可以“重建” v1 的部分。在 v2 中只需通过非零索引进行索引:
julia> v2[idxs[idxs .> 0]]
3-element Array{Int64,1}:
8
6
7

如果你看 the implementation ,您会看到它使用字典来存储和查找索引。这意味着它只通过一次 v1v2每个,而不是搜索 v2对于 v1 中的每个元素.在几乎所有情况下,它都应该更有效率。

如果匹配 R 的行为并返回第一个索引很重要,我们可以取消基本实现,只需向后构建字典,以便较低的索引覆盖较高的索引:
function firstindexin(a::AbstractArray, b::AbstractArray)
bdict = Dict{eltype(b), Int}()
for i=length(b):-1:1
bdict[b[i]] = i
end
[get(bdict, i, 0) for i in a]
end

julia> firstindexin([1,2,3,4], [1,1,2,2,3,3])
4-element Array{Int64,1}:
1
3
5
0

julia> indexin([1,2,3,4], [1,1,2,2,3,3])
4-element Array{Int64,1}:
2
4
6
0

关于r - Julia 版本的 R 的比赛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32334158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com