只需将每个元素的值除以所有数组元素的总和,即可为数组的每个元素分配概率。我正在尝试使用 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: non-broadcastable output operand with shape () doesn't match the broadcast shape (10)
我不明白为什么会发生此错误,尤其是从文件运行时。有人可以向我解释一下并帮助解决问题吗? 非常感谢!
最佳答案
sum
是 __builtin__.sum
,它不知道如何对 NumPy 数组求和,因此只返回数组不变。发生错误的原因是您尝试将奇异矩阵 e
除以 10x10 矩阵 s
。
你想要s = np.sum(buffer)
。
整个代码可以简化为:
self.probs.append(array / np.sum(array))
关于python - 计算数组列表的概率时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978171/