2014-11-15 4 views
1

Я пытаюсь выполнить интеграцию trapz с функцией, использующей 2 списка и 1 numpy.ndarray. Это не сработает, и я не могу решить, нужно ли мне конвертировать мои списки в другой тип данных. Я рад, что фактическая функция верна, но я не уверен, как действовать дальше?Python: TypeError: неподдерживаемый тип операндов для /: 'float' и 'list'

Функция:

BB_flux = trapz((1./lamz)*flux*T,x=lamz)/trapz((1./lamz)*T,x=lamz) 

где T и lamz списки и flux является ndarray, что я сделал с помощью интерполяции.

Оба T и lamz сделаны чтение из файла CSV, а затем добавляя значения в T и lamz как поплавки.

+0

Сообщение об ошибке довольно четкое представление о проблеме - то, что вы ожидали исхода, например, '1./lamz' быть? – jonrsharpe

+0

Я должен был просто получить большое количество в качестве значения BB_flux. Есть ли тип данных, который предпочитает trapz? потому что ни одна из других переменных не является плавающей точкой, поэтому я не уверен, как происходит ошибка –

+2

@ThomasBennett. Вы пытаетесь разделить значение '1.' на обычный список python, который не поддерживается. Вы ожидали, что результатом будет список поплавков? Для этого вам нужно будет использовать понимание списка: '[1./x для x в lamz]'. – ekhumoro

ответ

3

Python не поддерживает арифметическую операцию (/, *, +, -) в списках. Операторы + и * - операции списка.

Поскольку вы используете numpy, вы можете преобразовать свои списки в массивы numpy.

Если вы хотите сохранить lamz и T как списки можно использовать

w = numpy.asarray(T)/numpy.asarray(lamz) 
BB_flux = trapz(w*flux,x=lamz)/trapz(w,x=lamz) 
Смежные вопросы