julia 的 array 可以进行逻辑运算吗

我直接用 &, &&做array的逻辑运算,都是错的,虽然我可以创建逻辑array,我查了谷歌和julia的文档,也没有找到相关资料

你想要集合的交并差补

Base.Set 可以

julia> s = Set([1 2 3])
Set([2, 3, 1])

julia> s2 = Set([3 4 5])
Set([4, 3, 5])

julia> s ∪ s2
Set([4, 2, 3, 5, 1])

julia> s ∩ s2
Set([3])

julia> setdiff!(Set([0 1 3 5]), s)
Set([0, 5])

julia> issubset(Set([1]), s)
true

还是数组的逐项运算

julia> a1 = fill(0,3,3)
3×3 Array{Int64,2}:
 0  0  0
 0  0  0
 0  0  0

julia> a2 = fill(1,3,3)
3×3 Array{Int64,2}:
 1  1  1
 1  1  1
 1  1  1

julia> a1 .& a2
3×3 Array{Int64,2}:
 0  0  0
 0  0  0
 0  0  0

julia> a1 .| a2
3×3 Array{Int64,2}:
 1  1  1
 1  1  1
 1  1  1

按位运算

刚看了下按位运算符,发现是 & 看上去上面的的用错了,逻辑运算应该用 &&

help?> &
search: &

  &(x, y)

  Bitwise and.

     Examples
    ≡≡≡≡≡≡≡≡≡≡

  julia> 4 & 10
  0

  julia> 4 & 12
  4

help?> &&
search:

  x && y

  Short-circuiting boolean AND.
julia> a3 = fill(4,2,2)
2×2 Array{Int64,2}:
 4  4
 4  4

julia> a4 = fill(10,2,2)
2×2 Array{Int64,2}:
 10  10
 10  10

julia> a3 .& a4
2×2 Array{Int64,2}:
 0  0
 0  0

julia> a5 = fill(12,2,2)
2×2 Array{Int64,2}:
 12  12
 12  12

julia> a3 .& a5
2×2 Array{Int64,2}:
 4  4
 4  4
2 个赞

嗯的
julia> a=BitArray([1 0; 0 1])
2×2 BitArray{2}:
true false
false true

julia> b=BitArray([1 1; 0 1])
2×2 BitArray{2}:
true true
false true

julia> a .& b
2×2 BitArray{2}:
true false
false true

julia> a .|b
2×2 BitArray{2}:
true true
false true

Int. (a)
既可以将BitArray转换成Int Array

using Random
@time for i=1 :100
a=bitrand(5000,5000);
b = Int.(a);
end
println(“done by b = Int.(a);”)
@time for i=1 :100
a=bitrand(5000,5000);
convert(Array{Int}, a);
end
println(“done by convert(Array{Int}, a);”)
下面是运行的计时结果
QQ%E5%9B%BE%E7%89%8720180820214108
可以看出我测试的三次, convert的速度都较快。array运算如何有合适的函数,还是尽量使用函数,而不要用点运算吧