TypeError:+不支持的操作数类型:Python 3.6.8中的“ ​​float”和“ list”

时间:2019-09-09 11:29:05

标签: python floating-point python-3.6 typeerror operands

我不断收到TypeError: unsupported operand type(s) for +: 'float' and 'list'

我是python编程的新手,正在尝试将Matlab代码转换为Python。下面是尝试过的python代码。

import math
import cmath
import numpy as np
import random

Tp = .1e-6         
Xc = 2.e3       
c = 3e8 
B0 = 100e6  
X0 = 50        
w0 = 2 * cmath.pi * B0
fc = 1e9       
wc = 2*cmath.pi * fc
alpha = w0 / Tp         
wcm = wc - alpha * Tp       
Ts = (2 * (Xc - X0)) / c    
Tf = (2 * (Xc - X0)) / c + Tp   
dt = cmath.pi / (2 * alpha * Tp)  
n = 2 * math.ceil((0.5 * (Tf - Ts)) / dt) 
t = Ts + np.arange(0, n*dt, dt) 

dw = 2*cmath.pi / (n * dt)                  
w = wc + dw * np.arange(-n/2,n/2)  
xn = [0, 35, 36.5, -25]            
fn = [1, 0.8, 1, 0.8]               

ntarget = 4

# SIMULATION

s = np.zeros((1,n))             
na = 8              
ar = random.uniform(1,na)              
ter = 2 * cmath.pi * random.uniform(1,na)         

for i in np.arange(ntarget): 
td = t - (2 * (Xc + xn[i]) / c)
pha = wcm * td + alpha * np.power(td, 2)        
for j in np.arange(na):               
    pha = pha + ar[j] * math.cos((w[n/2 + 1 + [j]] - wc) * td + ter[j])

print('pha :', pha)

错误消息:

Error at
    pha = pha + ar[j] * math.cos((w[n/2 + 1 + [j]] - wc) * td + ter[j])

TypeError: unsupported operand type(s) for +: 'float' and 'list'

pha的预期输出是1到286之间的数字的数组/列表,即[-940.7325, -729.3720,......,6.6187*e4,6.6449*e4]

我很高兴能获得所有帮助。非常感谢。

1 个答案:

答案 0 :(得分:0)

有多个问题。在表达式math.cos((w[n/2 + 1 + [j]] - wc)中,您通过执行j将整数[j]放在单个元素列表中。因此[j] + any_number不再起作用。

此外,您正在索引arter,但它们是一个数字(请参阅random.uniform)。如果要使用特定大小的数组/向量,可以将np.random.uniformsize参数一起使用。

以下内容应该可以使用,但是在每次循环迭代中使用相同的随机值arter

s = np.zeros((1,n))             
na = 8              
ar = random.uniform(1,na)              
ter = 2 * cmath.pi * random.uniform(1,na)         

for i in np.arange(ntarget): 
    td = t - (2 * (Xc + xn[i]) / c)
    pha = wcm * td + alpha * np.power(td, 2)        
    for j in np.arange(na):               
        pha = pha + ar * math.cos((w[n/2 + 1 + j] - wc) * td + ter)
        print('pha :', pha)