麻烦高手来解释下这是为什么
如果想用julia来查找数组中重复的元素,如何做?
1 个赞
a = [1, 2, 3, 4, 5]
b = [1, 2, 3]
b in a
这里 b in a
的意思是 在[1, 2, 3, 4, 5]
里是否有 [1, 2, 3]
这个列表,而不是是否有 1, 2, 3
这几个数,所以应该是 false
。查找两个集合重复的部分可以用 findall
findall(x->x in [1, 3, 5], [1, 4, 5, 7, 9])
这将返回这些相同的数字在 [1, 4, 5, 7, 9]
这个 Vector
里的位置(index)
1 个赞
这个在数学上也不一样吧
\in 表示 属于
\subset 表示子集
你想表达的应该是b是a的子集,issubset(b,a). b当然不是a的元素,
1 个赞
谢谢提醒,这个更简单!
help?> issubset
search: issubset
issubset(a, b)
⊆(a,b) -> Bool
⊇(b, a) -> Bool
Determine whether every element of a is also in b, using in.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> issubset([1, 2], [1, 2, 3])
true
julia> [1, 2, 3] ⊆ [1, 2]
false
julia> [1, 2, 3] ⊇ [1, 2]
true
说一下 b∈a
为什么是 false
属于 ∈
指的是元素与集合的运算把 b 当作一个元素,但 a 中并没有数组,故为假。
你可能想要集合之间的包含 ⊆
julia> a=[1 3 5 7 9]
1×5 Array{Int64,2}:
1 3 5 7 9
julia> b=[1 3 5]
1×3 Array{Int64,2}:
1 3 5
julia> b ⊆ a
true
哈,我把最基础的概念给搞糊涂了
如果是查找重复的元素(下标),可以使用indexin
:
julia> a = [1 3 5 7 9]
1×5 Array{Int64,2}:
1 3 5 7 9
julia> b = [1 3 5]
1×3 Array{Int64,2}:
1 3 5
julia> indexin(b, a)
1×3 Array{Union{Nothing, CartesianIndex{2}},2}:
CartesianIndex(1, 1) CartesianIndex(1, 2) CartesianIndex(1, 3)
你的例子是矩阵,所以返回的是笛卡尔坐标,如果是向量:
julia> a = [1,3,5,7,9]
5-element Array{Int64,1}:
1
3
5
7
9
julia> b = [1,3,5]
3-element Array{Int64,1}:
1
3
5
julia> indexin(b, a)
3-element Array{Union{Nothing, Int64},1}:
1
2
3
julia> a[indexin(b, a)]
3-element Array{Int64,1}:
1
3
5
2 个赞
非常感谢!相信这个会对后来者有巨大的帮助!
嗯,所以推荐大家来论坛问问题。