Python: Почему это не работает?/ Что на самом деле означает эта ошибка?
В настоящее время у меня есть следующее, но оно не будет перебирать меня. Я не понимаю, почему это не работает. Длина волны и пропускная способность являются списками. Похоже, что я начинаю с 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
Я получаю ошибку:
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,)
Длина волны и пропускная способность имеют одинаковую длину.
Я понятия не имею, что это на самом деле означает, несмотря на то, что посмотрел.
Заранее спасибо.
1 ответ
Решение
Цикл можно заменить векторными вычислениями:
c=3e18
ABconstant = c / numpy.array(Bwavelength) ** 2 * throughput
ABflux = numpy.trapz(ABconstant, Bwavelength)
return ABflux