Python:逐个元素对数组求和
Python: sum over arrays element by element
我有 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]])
您的问题是您正在尝试将 float
添加到 None
。您可以使用列表理解大大简化您的代码:
probs = [models[i].predict_proba(X) for i in range(5)]
然后求和,只需sum(probs)
您在开始时将 [None]
指定为 result
,然后尝试在 for 循环的第一次迭代中立即添加它,这会导致错误消息。
相反,您可以尝试使用列表理解,因为使用 Python:
result = sum([models[i].predict_proba(X) for i in range(5)])
您将result定义为一个列表,但它应该是一个float类型。
试试这个:
results = 0
这应该可以解决问题:
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)
结果的预期形状。
我有 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]])
您的问题是您正在尝试将 float
添加到 None
。您可以使用列表理解大大简化您的代码:
probs = [models[i].predict_proba(X) for i in range(5)]
然后求和,只需sum(probs)
您在开始时将 [None]
指定为 result
,然后尝试在 for 循环的第一次迭代中立即添加它,这会导致错误消息。
相反,您可以尝试使用列表理解,因为使用 Python:
result = sum([models[i].predict_proba(X) for i in range(5)])
您将result定义为一个列表,但它应该是一个float类型。 试试这个:
results = 0
这应该可以解决问题:
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)
结果的预期形状。