Apply array function such as fft to nested array

I have an array A of 2-SVectors. I’d like to apply fft component-wise, namely, something like fft(A[:,:][1]) and fft(A[:,:][2]) and put them together again as nested array of vectors. It is best if this can be done in-place, namely, through something like plan_fft!. Is there a natural way of doing this? I can use getindex.(A,1) but this cannot generate a “view” to allow in-place operations.

I found a solution

A_r = reinterpret(reshape,eltype(A[1]),A)
fft!(A_r,(2,3))

Of course eltype(A) should be of some complex float type to allow in-place fft.

Update: here is an example: BTW, reinterpret(reshape, ... ) only works for Julia 1.6 and above

julia> using LinearAlgebra

julia> using StaticArrays

julia> using FFTW

julia> N=10; M=20;

julia> vf=[@SVector rand(ComplexF64,2) for n in 1:N, m=1:M];        

julia> vf_copy=deepcopy(vf);

julia> vfr=reinterpret(reshape,eltype(eltype(vf)),vf);

julia> fft!(vfr,(2,3));

julia> fft_vf1=fft(getindex.(vf_copy,1));

julia> norm(fft_vf1-getindex.(vf,1))
0.0

julia> fft_vf2=fft(getindex.(vf_copy,2));

julia> norm(fft_vf2-getindex.(vf,2))
0.0

1 Like

@jinml, could you complete your example with some fake input data, to make it useful to others?
Thanks.