Closed
Description
openedon Aug 8, 2016
I'm working on a PR to fix these (which will also generalize FFT to non-1 indices), but I may get interrupted for a couple of days so I thought I'd at least document some problems I noticed just from browsing the current code.
First, at least rfft
fails for anything other than StridedArray
s:
julia> a = randn(10)
10-element Array{Float64,1}:
0.0243352
-1.70058
2.23913
-0.0130746
-1.10423
-0.259103
0.871204
-0.799567
-0.0846184
-0.676859
julia> b = view(a, 1:8)
8-element SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true}:
0.0243352
-1.70058
2.23913
-0.0130746
-1.10423
-0.259103
0.871204
-0.799567
julia> rfft(b)
5-element Array{Complex{Float64},1}:
-0.741877+0.0im
-0.446848-0.904787im
-4.19023+1.14704im
2.70397+1.83107im
4.80277+0.0im
julia> b = view(a, [1:8;])
8-element SubArray{Float64,1,Array{Float64,1},Tuple{Array{Int64,1}},false}:
0.0243352
-1.70058
2.23913
-0.0130746
-1.10423
-0.259103
0.871204
-0.799567
julia> rfft(b)
ERROR: MethodError: no method matching plan_rfft(::SubArray{Float64,1,Array{Float64,1},Tuple{Array{Int64,1}},false}, ::UnitRange{Int64})
Closest candidates are:
plan_rfft{N}(::Union{Base.ReshapedArray{Float32,N,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N}}},DenseArray{Float32,N},SubArray{Float32,N,A<:Union{Base.ReshapedArray{T,N,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N}},L}}, ::Any; flags, timelimit) at fft/FFTW.jl:636
plan_rfft{N}(::Union{Base.ReshapedArray{Float64,N,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N}}},DenseArray{Float64,N},SubArray{Float64,N,A<:Union{Base.ReshapedArray{T,N,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N}},L}}, ::Any; flags, timelimit) at fft/FFTW.jl:636
plan_rfft{T<:Union{Integer,Rational{T<:Integer}}}(::AbstractArray{T<:Union{Integer,Rational},N}, ::Any; kws...) at dft.jl:191
...
in #plan_rfft#7(::Array{Any,1}, ::Function, ::SubArray{Float64,1,Array{Float64,1},Tuple{Array{Int64,1}},false}) at ./dft.jl:38
in rfft(::SubArray{Float64,1,Array{Float64,1},Tuple{Array{Int64,1}},false}) at ./dft.jl:36
Second, Float16
is an AbstractFloat
but is not supported by FFTW, so:
julia> a = randn(Float16, 8)
8-element Array{Float16,1}:
-1.7412
0.38818
0.066711
-0.64893
1.3623
-0.48633
-1.1904
-0.023666
julia> fft(a)
ERROR: MethodError: no method matching plan_fft(::Array{Complex{Float16},1}, ::UnitRange{Int64})
Closest candidates are:
plan_fft{T<:Union{Complex{Float32},Complex{Float64}},N}(::Union{Base.ReshapedArray{T<:Union{Complex{Float32},Complex{Float64}},N,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N}}},DenseArray{T<:Union{Complex{Float32},Complex{Float64}},N},SubArray{T<:Union{Complex{Float32},Complex{Float64}},N,A<:Union{Base.ReshapedArray{T,N,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N}},L}}, ::Any; flags, timelimit) at fft/FFTW.jl:585
plan_fft{T<:Real}(::AbstractArray{T<:Real,N}, ::Any; kws...) at dft.jl:185
plan_fft{T<:Union{Integer,Rational{T<:Integer}}}(::AbstractArray{Complex{T<:Union{Integer,Rational}},N}, ::Any; kws...) at dft.jl:187
...
in fft(::Array{Float16,1}, ::UnitRange{Int64}) at ./dft.jl:184 (repeats 2 times)
even though
julia> a = round(Int, 10*randn(8))
8-element Array{Int64,1}:
-8
-3
1
-20
-2
15
-5
2
julia> fft(a)
8-element Array{Complex{Float64},1}:
-20.0+0.0im
-3.17157+22.2843im
-6.0-30.0im
-8.82843+34.2843im
-8.0+0.0im
-8.82843-34.2843im
-6.0+30.0im
-3.17157-22.2843im
works fine.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment