苦苦于理解错误信息

时间:2014-11-22 15:11:48

标签: python

我正在尝试运行下面的代码,其中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,)

我不太了解错误(我对编程很新),但我认为这意味着两个“形状”没有相同的尺寸。我不确定为什么会这样。

提前致谢。

2 个答案:

答案 0 :(得分:1)

根据this documentationtrapz(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

答案 1 :(得分:1)

替换:

numpy.trapz(Bwavelength, ABconstant, h)

使用:

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