Mam dwie matryce NXM z 1 i 0 (zadzwoń do nich A i B). Chcę konwertować je do zmiennych boolowskich, a następnie zastosować "i" i "lub" operacje. W Pythonie to jest łatwe:

A = np.array(A, dtype=bool)
B = np.array(B, dtype=bool)
    
A | B 
A & B

Chcę jednak zrobić to samo w Julii, a mam pewne problemy. Najpierw konwertuję na Boolean Via

A = convert(Array{Bool}, A)
B = convert(Array{Bool},B)

Ale potem robię && b, dostaję

TypeError: non-boolean (Array{Bool,2}) used in boolean context

Co ja robię źle?

2
Joshuah Heath 23 listopad 2020, 00:22

1 odpowiedź

Najlepsza odpowiedź

Najpierw tworzymy matryce, które przechowują 0 - 1 wartości:

julia> using Random

julia> Random.seed!(1234);

julia> A = rand([0, 1], 3, 4)
3×4 Array{Int64,2}:
 0  0  1  1
 0  1  1  0
 1  0  1  0

julia> B = rand([0, 1], 3, 4)
3×4 Array{Int64,2}:
 1  1  1  0
 0  1  1  1
 0  1  1  1

Następnie nadawał za pomocą . konstruktora Bool, aby uzyskać matryce boolowskie:

julia> A_bool = Bool.(A)
3×4 BitArray{2}:
 0  0  1  1
 0  1  1  0
 1  0  1  0

julia> B_bool = Bool.(B)
3×4 BitArray{2}:
 1  1  1  0
 0  1  1  1
 0  1  1  1

Podobnie użyj nadawania . na & i |, aby uzyskać, co chcesz:

julia> A_bool .| B_bool
3×4 BitArray{2}:
 1  1  1  1
 0  1  1  1
 1  1  1  1

julia> A_bool .& B_bool
3×4 BitArray{2}:
 0  0  1  0
 0  1  1  0
 0  0  1  0

Należy pamiętać, że w tym konkretnym przypadku przy użyciu | i & i & na oryginalnych matrycach otrzyma równoważny wynik (ale matryce zawierałyby 0 - 1 liczba całkowita):

julia> A .| B
3×4 Array{Int64,2}:
 1  1  1  1
 0  1  1  1
 1  1  1  1

julia> A .& B
3×4 Array{Int64,2}:
 0  0  1  0
 0  1  1  0
 0  0  1  0
5
Bogumił Kamiński 22 listopad 2020, 21:56