Проблема с A = .!B
заключается в том, что логическое отрицание !(::Int64)
не определено для целых чисел. Это имеет смысл: что, скажем, !3
разумно дать?
Поскольку вы хотите выполнить логическую операцию, есть ли более глубокая причина, по которой вы начинаете работать с целыми числами?
Возможно, вы могли бы работать с BitArray
, который гораздо более эффективен и должен вести себя как обычный Array
в большинстве операций.
Вы можете легко преобразовать вашу целочисленную матрицу в BitArray
. После этого применение логического не работает, как ожидалось.
julia> A = rand(0:1, 5,5)
5×5 Array{Int64,2}:
0 0 0 1 1
0 1 0 0 1
0 1 1 1 0
1 1 0 0 0
1 1 1 0 0
julia> B = BitArray(A)
5×5 BitArray{2}:
0 0 0 1 1
0 1 0 0 1
0 1 1 1 0
1 1 0 0 0
1 1 1 0 0
julia> .!B
5×5 BitArray{2}:
1 1 1 0 0
1 0 1 1 0
1 0 0 0 1
0 0 1 1 1
0 0 0 1 1
Важнейшей частью здесь является то, что тип элемента (eltype
) для BitArray
равен Bool
, для которого отрицание явно хорошо определено,В этом смысле вы также можете использовать B = Bool.(A)
для преобразования всех элементов в логические значения.