【问题标题】:Python: TypeError: unsupported operand type(s) for /: 'float' and 'list'Python:TypeError:/:'float'和'list'不支持的操作数类型
【发布时间】:2015-01-12 23:05:56
【问题描述】:

我正在尝试使用 2 个列表和 1 个 numpy.ndarray 的函数进行 trapz 集成。它不起作用,我无法确定是否需要将列表转换为其他数据类型。我很高兴实际功能是正确的,但我不确定如何进行?

函数是:

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

Tlamz 是列表,flux 是我通过插值制作的 ndarray。

Tlamz 都是通过读取 csv 文件然后将值作为浮点数附加到 Tlamz 来生成的。

【问题讨论】:

  • 错误消息非常清楚地说明了问题 - 您期望的结果是什么,例如1./lamz 是吗?
  • 我应该只是得到一个大数字作为 BB_flux 的值。有没有 trapz 喜欢的数据类型?因为其他变量都不是浮点数,所以我不确定错误是如何发生的
  • @ThomasBennett。您正在尝试将值 1. 除以不支持的普通 python 列表。您是否期望结果是浮动列表?为此,您需要使用列表理解:[1./x for x in lamz]
  • 我同意@ekhumoro。或者,您可以在给定行之前执行lamz = np.array(lamz),然后您不需要更改该行。但是@ekhumoro 的解决方案更干净!

标签: python numpy integration


【解决方案1】:

Python 不支持列表上的算术运算 (/,*,+,-)。 运算符 + 和 * 是列表操作。

由于您使用 numpy,您可以将列表转换为 numpy 数组。

如果你想保留 lamz 和 T 作为列表,你可以使用

w = numpy.asarray(T)/numpy.asarray(lamz)
BB_flux = trapz(w*flux,x=lamz)/trapz(w,x=lamz)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多