The docstring for conj
states that
conj(A::AbstractArray)
Return an array containing the complex conjugate of each entry in array A.
Equivalent to `conj.(A)`, except that when `eltype(A) <: Real` `A` is returned without copying, and that when `A` has zero dimensions, a 0-dimensional array is returned (rather than a scalar).
Except, conj
is special-cased to be lazy for Adjoint
and Transpose
, so it is not equivalent to conj.(A)
as the result shares memory with the original array. For example:
julia> A = rand(ComplexF64,2,2)'
2Ă—2 adjoint(::Matrix{ComplexF64}) with eltype ComplexF64:
0.891314-0.0686279im 0.0718785-0.679878im
0.685828-0.0606725im 0.155366-0.0544453im
julia> B = conj(A)
2Ă—2 transpose(::Matrix{ComplexF64}) with eltype ComplexF64:
0.891314+0.0686279im 0.0718785+0.679878im
0.685828+0.0606725im 0.155366+0.0544453im
julia> B .*= 2
2Ă—2 transpose(::Matrix{ComplexF64}) with eltype ComplexF64:
1.78263+0.137256im 0.143757+1.35976im
1.37166+0.121345im 0.310732+0.108891im
julia> A
2Ă—2 adjoint(::Matrix{ComplexF64}) with eltype ComplexF64:
1.78263-0.137256im 0.143757-1.35976im
1.37166-0.121345im 0.310732-0.108891im
This behavior has explicit tests for it, so this appears intentional. Would it be better to change this behavior and be consistent with the docstring (and with other matrices in general)?