【问题标题】:Python: sum over arrays element by elementPython:逐个元素对数组求和
【发布时间】:2018-09-09 23:15:33
【问题描述】:

我有 5 个模型的一些概率输出,我将概率元素逐个元素相加,如下所示:

probs = [None] * 5

for i in range(0,5):
  probs[i] = models[i].predict_proba(X)

probs[0] + probs[1] + probs[2] + probs[3] + probs[4]

这很好用。

然后我尝试通过以下操作稍微简化上面的代码:

probs = [None] * 5
results = [None]

for i in range(0,5):
  probs[i] = models[i].predict_proba(X)
  results += probs[i]

results

但出现以下错误:

TypeError unsupported operand type(s) for +: 'NoneType' and 'float' 
TypeErrorTraceback (most recent call last)
<ipython-input-20-8d4d443a7428> in <module>()
      4 for i in range(0,5):
      5   probs[i] = models[i].predict_proba(X)
----> 6   results += probs[i]
      7 
      8 results

TypeError: unsupported operand type(s) for +: 'NoneType' and 'float'

如何解决此类错误?谢谢。

Note: 

probs[i] is of format:

array([[  9.99877759e-01,   1.22241455e-04],
       [  9.99694005e-01,   3.05994629e-04],
       [  9.47546608e-01,   5.24533925e-02],
       [  1.83994998e-01,   8.16005002e-01],
       [  9.66928729e-01,   3.30712706e-02],
       [  9.99487283e-01,   5.12717255e-04],
       [  2.85824823e-03,   9.97141752e-01],
       [  9.97979081e-01,   2.02091861e-03],
       [  9.99744813e-01,   2.55186665e-04]])

【问题讨论】:

  • 为什么结果是一个列表?不应该是个浮点数吗?
  • 只需设置results = 0,您的代码就会运行良好。但是,您应该真正考虑以下答案,因为它们更符合 Python 风格。

标签: python arrays aggregation


【解决方案1】:

您的问题是您正在尝试将float 添加到None。您可以使用列表推导大大简化您的代码:

probs = [models[i].predict_proba(X) for i in range(5)]

然后得到总和,只需sum(probs)

【讨论】:

    【解决方案2】:

    您在开始时将 [None] 分配为 result,然后尝试在 for 循环的第一次迭代中立即添加它,这会导致错误消息。

    相反,您可以尝试使用 Python 之后的列表推导:

    result = sum([models[i].predict_proba(X) for i in range(5)])
    

    【讨论】:

      【解决方案3】:

      您将结果定义为列表,但它应该是浮点类型。 试试这个:

      results = 0
      

      【讨论】:

        【解决方案4】:

        这应该可以解决问题:

        probs = [None] * 5
        results = np.zeros(data.shape)
        
        for i in range(0,5):
          probs[i] = models[i].predict_proba(X)
          results += probs[i]
        
        results
        

        其中,data.shape 应该是来自models[i].predict_proba(X) 的结果的预期形状。

        【讨论】:

          猜你喜欢
          • 2020-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-18
          • 1970-01-01
          相关资源
          最近更新 更多