我直接用 &, &&做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);”)
下面是运行的计时结果
可以看出我测试的三次, convert的速度都较快。array运算如何有合适的函数,还是尽量使用函数,而不要用点运算吧