简体   繁体   English

Python:为什么这行不通?/这个错误的真正含义是什么?

[英]Python: Why isn't this working?/What does this error really mean?

I've currently got the following, but it won't iterate over i. 我目前有以下内容,但它不会遍历我。 I don't understand why it isn't working. 我不明白为什么它不起作用。 Bwavelength and throughput are lists. B波长和吞吐量是列表。 It appears that i starts at 0, but won't increase to 1. 看来我从0开始,但不会增加到1。

ABconstant=[]

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

The error I get is: 我得到的错误是:

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,)

Bwavelength and throughput are of equal length. B波长和吞吐量相等。

I have no idea what that actually means, despite having looked it up. 尽管查了一下,但我不知道这实际上意味着什么。

Thanks in advance. 提前致谢。

The loop can be substituted by vector calculations: 该循环可以用矢量计算代替:

c=3e18
ABconstant = c / numpy.array(Bwavelength) ** 2 * throughput
ABflux = numpy.trapz(ABconstant, Bwavelength)
return ABflux

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM