2017-04-06 10 views
0

나는 파이썬에서 Hankel Transform을위한 기존의 구현을 찾고있다. (사실 나는 두 개의 2 차원 방사형 대칭 함수의 대칭 푸리에 변환에 더 많이 관여하지만 hankel 변형으로 쉽게 축소 될 수있다.).파이썬 : 1 차원 배열을위한 Fast Hankel Transform

나는 hankel 파이썬 모듈에 대해 알고 있지만, 입력에 대해서는 람다 함수가 필요하지만 1d 배열 만 필요합니다.

의견이 있으십니까? 당신이 Hankel에 대한 문서를 당신이 당신이 hankel.transform(function, array, ret_err=bool) 호출 변환을 수행 보게 될 변환 섹션을 통해 모든 방법을 읽으면

+1

한켈 변환] (https://www.gnu.org/software/gsl/manual/html_node/Discrete-Hankel-Transforms.html#Discrete-Hankel-Transforms). [PyGSL] (http://pygsl.sourceforge.net/)은 파이썬 GSL 래퍼를 제공합니다. 설치를 시도한 이후로 잠시 기다려 왔기 때문에 내가 얼마나 어려울 지 모르겠습니다. –

답변

1

저는 hankel의 저자입니다. 이 경우에는 코드를 사용하지 않는 것이 좋습니다 (호출 가능한 입력 함수가 필요하며 DHT가 아닌 적분을 정확하게 계산하는 것이 목적이기 때문에 입니다). .

입력 된 1D 배열을 보간하면됩니다. 이것은 일반적으로 꽤 잘 다음 작품 같은 당신에게 달려 있지만, 수행 방법 :

from scipy.interpolate import InterpolatedUnivariateSpline as Spline 
import numpy as np 

x, y = # Import/create data vectors 

# Do this if y is both negative and positive 
fnc = Spline(x,y, k=1) #I usually choose k=1 in case anything gets extrapolated. 

# Otherwise do this 
spl = Spline(np.log(x), np.log(y), k=1) 
fnc = lambda x : np.exp(spl(np.log(x))) 

# Continue as normal with hankel.transform(fnc, kvec) 

이렇게하면 매개 변수 N 및 선택에에 큰 문제 h 같은 잘 모든 값을 근사 변환 있음 k의 값은 kvec입니다. kvec이 넓은 동적 범위에 걸쳐있는 경우 변환에서 각 k에 동일한 기본 배열 (길이가 N)을 사용하므로 매우 낮은 효율성을 나타냅니다. 즉, 가장 어려운 값인 k은 성능 수준을 설정합니다.

그래서 다시, 짧은 나는 hankel 권하고 싶지 않다,하지만 당신은 아무 것도 찾을 수없는 경우, 그것은 여전히 ​​작동합니다 ;-)

는 GNU 과학 라이브러리 (GSL)이 이산을 계산 [기능을 포함
1

은 그래서 당신은 당신이 필요로하는 변화의 어떤 형태의 기능이 필요합니다. 위키 백과 항목에 변형 기능 목록이 Hankel Transformation으로 있다고 생각합니다.

+0

필자는 문서를 읽었을 때'hankel.transform'에서 입력을 위해 __callable__ 함수가 필요하지만, 대신 1d- 배열을 가지고 있다고 –

+0

함수가 1d 정렬. 나는 hankel.tranform 메소드를 호출 할 수있는 배열과 배열을 둘 다 필요로한다는 인상하에 있었다. – Grr

+0

내가 필요한 것은'hankel.transform (array, array, ret_err)'이다. –