I have the following example:
julia> a=1+2im
1 + 2im
julia> A=a*ones(3)
3-element Vector{ComplexF64}:
 1.0 + 2.0im
 1.0 + 2.0im
 1.0 + 2.0im
How can I can convert A into two vectors, a vector of the real values and a vector of the imaginary values?
             
            
              
            
           
          
            
            
              Thanks a lot! Is that documented anywhere? I tried re(A) and im(A) and A.re and A.im which didn’t work…
             
            
              
            
           
          
          
            
            
              
julia> A[1]. <TAB><TAB>
im  re
julia> getproperty.(A,:im)
3-element Vector{Float64}:
 2.0
 2.0
 2.0
julia> getproperty.(A,:re)
3-element Vector{Float64}:
 1.0
 1.0
 1.0
 
            
              2 Likes 
            
            
           
          
            
            
              I’ll point out one other way via reinterpret. This allows you to make real and imaginary views of the data without copying.
julia> B = reinterpret(Float64, A)
6-element reinterpret(Float64, ::Vector{ComplexF64}):
 1.0
 2.0
 1.0
 2.0
 1.0
 2.0
julia> A_real = @view B[1:2:end]
3-element view(reinterpret(Float64, ::Vector{ComplexF64}), 1:2:5) with eltype Float64:
 1.0
 1.0
 1.0
julia> A_imag = @view B[2:2:end]
3-element view(reinterpret(Float64, ::Vector{ComplexF64}), 2:2:6) with eltype Float64:
 2.0
 2.0
 2.0
julia> A[1] = 3 + 5im
3 + 5im
julia> A_real[1]
3.0
julia> A_imag[1]
5.0
 
            
              5 Likes 
            
            
           
          
            
            
              
Looks like Base already has a function for this: reim
             
            
              
            
           
          
            
            
              I do not think that reim produces views. We should make @view reim(A) work though.
             
            
              2 Likes 
            
            
           
          
            
            
              Ah right. I misread the non-copying mention in the docs there.
             
            
              1 Like 
            
            
           
          
            
              
                DNF  
              
                  
                    July 2, 2023,  4:30pm
                   
                  11 
               
             
            
              
Messing about with internal fields, when there are canonical functions for this, is really not advisable.
             
            
              1 Like 
            
            
           
          
            
            
              Yes sure, fully agree. I just wanted to point out that @ufechner7  came very close in using the ‘re’ and ‘im’ properties and the usefulness of experimenting with the double <TAB> and see what comes up
             
            
              
            
           
          
            
            
              Also see StructArrays: A = StructArray(...), and now you have both an array of complex numbers A and its components A.re and A.im. These two representations share the same memory and operations are often more efficient.