【问题标题】:Error while computing probabilities of an array list计算数组列表的概率时出错
【发布时间】:2012-06-11 10:13:15
【问题描述】:

可以通过简单地将每个元素的值除以所有数组元素的总和来为数组的每个元素分配一个概率。我正在尝试使用 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) 不匹配

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

【问题讨论】:

  • 输入是什么样的?
  • 你在哪一行得到异常?还有你的意见是什么?
  • 输入是一个 numpy 数组的列表,格式为:array_list = [ np.array, np.array, np.array, ... ]。所有 np 数组都是 2d 并且具有相同的形状 (100x100)。错误发生在第7行e/=s
  • 对此感到抱歉。现在它被正确命名了

标签: python arrays numpy


【解决方案1】:

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

你想要s = np.sum(buffer)

整个代码可以简化为:

self.probs.append(array / np.sum(array))

【讨论】:

  • +1 as ipython in interactive mode (--pylab) 将 np.sum 作为 sum 导入,因此它可以在 ipython 中工作,但不能像 OP 提到的那样在文件中工作。
  • 非常感谢您的帮助!现在我明白发生了什么。 :)
猜你喜欢
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多