2

可以通过简单地将每个元素的值除以所有数组元素的总和来为数组的每个元素分配一个概率。我正在尝试使用 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:具有形状 () 的不可广播输出操作数与广播形状不匹配 (10)

我不明白为什么会发生此错误,尤其是从文件运行时。任何人都可以向我解释并帮助解决问题吗?非常感谢!

4

1 回答 1

3

sumis __builtin__.sum,它不知道如何对 NumPy 数组求和,所以只返回数组不变。发生错误是因为您试图将奇异矩阵e除以 10x10 矩阵s

你想要s = np.sum(buffer)

整个代码可以简化为:

self.probs.append(array / np.sum(array))
于 2012-06-11T14:44:30.830 回答