Julia的 in 为什么不对?

image
麻烦高手来解释下这是为什么
如果想用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 个赞

非常感谢!相信这个会对后来者有巨大的帮助!

嗯,所以推荐大家来论坛问问题。