【问题标题】:TypeError: unsupported operand type(s) for +: 'map' and 'float'类型错误:+ 不支持的操作数类型:“map”和“float”
【发布时间】:2020-05-02 04:34:33
【问题描述】:

我在 Colaboratory 上练习 tesorflow,我的代码如下。 有一些问题,错误信息是

"TypeError: + 的不支持的操作数类型:'map' 和 'float'"

谁能告诉我怎么了?谢谢!

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(20)
y = map(lambda x: x + np.random.randn(1), x)
a, b = np.polyfit(x, y, 1)
plt.plot(x, y, 'o', np.arange(20), a*np.arange(20)+b, '-');**

【问题讨论】:

  • 你在使用 Python 3 吗?您不能将map 对象传递给np.polyfit,它需要一个类似数组的对象。这和张量流有什么关系?
  • 请在发布错误消息时显示完整的回溯,或者至少说明它来自哪一行。顺便说一句,如果您将y 转换为list,那么它会在plt.plotValueError: x and y must have same first dimension 中失败
  • 请点击下方地址。 colab.research.google.com/notebooks/…
  • @PingyaoChen:不,我不能,它要求我登录谷歌帐户。无论如何,该代码可能是为 Python 2 编写的,其中 map() 返回一个列表对象,在 Python 3 中它返回一个 map 对象。
  • 你是对的。我找到了答案。 Python2 是返回列表,Python3 是返回映射。所以需要添加一个列表来转换它。 y = list(map(lambda x: x + np.random.randn(1), x))

标签: python


【解决方案1】:

“合作介绍”是由 Python2 编写的,正如@cdarke 所说,map() 在 Python3 中返回一个地图对象。因此,您应该将地图 obj 转换为列表。像这样替换代码:

y = list(map(lambda x: x + np.random.randn(1), x))

【讨论】:

    【解决方案2】:

    Python 3 中,map() 返回一个可迭代对象,而在Python 2 中,它返回一个列表。 python 可迭代和浮点数之间的任何数学运算,如 numpy 的polyfit(),都会引发类似的错误。行:

    a, b = np.polyfit(x, y, 1)
    

    在 Python 3 中抛出上述错误,因为 y 是函数 map() 返回的可迭代对象。您很可能正在使用 Python 3。因此您需要在进行任何数学运算之前将y 转换为列表,例如np.polyfit(x, list(y), 1)

    【讨论】:

      【解决方案3】:

      尝试替换

      y = map(input1(x), x)
      

      y = map(input1, x)
      

      【讨论】:

        猜你喜欢
        • 2021-06-16
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 2018-12-26
        • 1970-01-01
        相关资源
        最近更新 更多