2014-11-22 62 views
0

我试图运行下面的代码,其中Bwavelength,吞吐量和newflux是列表。努力理解错误消息

def ABconversion(Bwavelength, throughput): 
    ABconstant=[] 

    c=3e18 
    i=0 
    for i in range(0, len(Bwavelength)): 
     ABconstant.append(((3e18/((Bwavelength[i])**2))*throughput[i])) 
     i+=1 
     print len(Bwavelength), len(ABconstant), ABconstant 
     a=Bwavelength[0] 
     b=Bwavelength[-1] 
     h=((b-a)/len(Bwavelength)) 
     ABflux = numpy.trapz(Bwavelength, ABconstant, h) 
     return ABflux 

def ABmagnitude(newflux, ABflux): 
    ABmagarray=[] 
    for i in range(len(newflux)): 
     ABmag = -2.5*log10((newflux[i])/ABflux) - 48.6 
     ABmagarray.append(ABmag) 
    return ABmagarray 

ABflux1 = ABconversion(Bwavelength, throughput) 
print ABflux1 
ABmagarray = ABmagnitude(z, ABflux1) 
print epoch, ABmagarray 

z在文件的前面定义,也是一个列表。

然而,当我运行此我得到的消息:

Traceback (most recent call last): 
    File "Rewrite17.11.2014.py", line 196, in <module> 
    ABflux1 = ABconversion(Bwavelength, throughput) 
    File "Rewrite17.11.2014.py", line 186, in ABconversion 
    ABflux = numpy.trapz(Bwavelength, ABconstant, h) 
    File "C:\Python27\lib\site-packages\numpy\lib\function_base.py, line 3234, in trapz 
    ret = add.reduce(d * (y[slice1]+y[slice2]/2.0, axis) 
ValueError: Operands could not be broadcast together with shapes (0,) (444,) 

我不太理解的错误(我是相当新的节目),但我认为,这意味着两个“形状”没有相同的尺寸。我不确定这是为什么。

在此先感谢。

+0

什么行'打印LEN(Bwavelength),LEN(ABconstant),ABconstant'打印? – ErikR 2014-11-22 15:27:17

+0

它打印445,1,[0.0] – NXW 2014-11-22 15:31:03

回答

1

根据this documentation的参数trapz(y, x, dx, axis)是:

  • y - 像阵列 - 输入阵列集成。
  • x - 可选阵列 - 如果x为无,则所有y元素之间的间距为dx
  • dx - 可选标量 - 如果x为无,则假定由dx给出的间距。默认值为1.
  • axis - 可选Int - 指定坐标轴。

所以,你不应该同时指定xdx - 他们中的一个应该是None。可能这是你想要的:trapz(Bwavelength, None, h)

有关错误消息和NumPy的“braodcasting规则”的更多详细信息,请参阅this answer

0

替换:

numpy.trapz(Bwavelength, ABconstant, h) 

有:

numpy.trapz(np.array(Bwavelength)[:,np.newaxis], ABconstant, h)