可以通过简单地将每个元素的值除以所有数组元素的总和来为数组的每个元素分配概率。我试图用python做一个很长的numpy数组列表。我的代码:
def calc_probs(self, array_list):
for array in array_list:
buffer=array.astype("float")
s=sum(buffer)
for e in np.nditer(buffer, op_flags=["readwrite"]):
e/=s
self.probs.append(buffer)
此代码应该正常工作。实际上,当它在IPython的交互模式中输入时它正在工作。结果就是我想要的结果。但是,如果我将代码保存到文件并运行,我总是得到以下ValueError:
ValueError:shape()的不可广播输出操作数与广播形状不匹配(10)
我不明白为什么会出现此错误,尤其是从文件运行时。有人可以向我解释并帮助解决问题吗? 非常感谢!
答案 0 :(得分:3)
sum
是__builtin__.sum
,它不知道如何对NumPy数组求和,因此只返回数组不变。发生错误是因为您试图将奇异矩阵e
除以10x10矩阵s
。
您想要s = np.sum(buffer)
。
这整个代码可以简化为:
self.probs.append(array / np.sum(array))