我正在尝试在python3中实现一个函数,但是我无法弄清楚参数中的错误。以下是我的代码和错误:
def FFT1(A,n,w):
if n==1:
return A
AEven=[]
for k in range(0,n,2):
key1= A[k]
AEven.append(key1)
AOdd=[]
for l in range(1,n,2):
key2=A[l]
AOdd.append(key2)
VE=FFT1(AEven, n/2, w**2)
VO=FFT1(AOdd, n/2, w**2)
mult= complex(-1,1)
V=[]*n
for i in range(0,(n-2)/2):
V[i]=VE[i]+(w**mult)*VO[i]
V[n/2+i]=VE[i]-(w**mult)*VO[i]
return V
FFT1(coeff, degree, rootunit)
导致:
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
FFT1(coeff, degree, rootunit)
File "<pyshell#44>", line 12, in FFT1
VE=FFT1(AEven, n/2, w**2)
File "<pyshell#44>", line 5, in FFT1
for k in range(0,n,2):
TypeError: 'float' object cannot be interpreted as an integer
答案 0 :(得分:0)
如果n
必须保持浮动,则int(n)
内的range
更改为n
。如果n
可以是int,请使用n//2
而不是n/2
来调用递归函数
答案 1 :(得分:0)
Python range()函数不接受浮动值作为步骤。尝试使用int()函数将所有浮点数转换为整数。基本上你可能传递像n / k这样的东西用int(n / k)代替它当然会产生一些意想不到的结果。
答案 2 :(得分:0)
由于FFT例程的各个方面都要求n
为整数,因此您应该声明它是一个整数,或者将它强制转换为整数。我的建议是强制改为int:
def FFT1(A,n,w):
n = int(n)
if n==1:
....