Python 更改维度时从广播中获得不同的结果

Python 更改维度时从广播中获得不同的结果,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,我正在使用 sum(self.eval_h(self.x)*self.w.重塑(1,self.n))/sum(self.w)做点积和 其中eval_h定义为 def eval_h(self, x): """ evaluate h """ if "h_params" in self.kwargs: if x.ndim == 1: return self.h(x, **self.kwargs["h_params"])

我正在使用
sum(self.eval_h(self.x)*self.w.重塑(1,self.n))/sum(self.w)
做点积和

其中
eval_h
定义为

def eval_h(self, x):
    """
    evaluate h
    """
    if "h_params" in self.kwargs:
        if x.ndim == 1:
            return self.h(x, **self.kwargs["h_params"])
        else:
            return apply_along_axis(lambda x: self.h(x, **self.kwargs["h_params"]), 1, x)
    else:
        if x.ndim == 1:
            return self.h(x)
        else:
            return apply_along_axis(lambda x: self.h(x), 1, x)
而且
x
是有形状的

def pop_x(self):
    """
    populate x with zeros
    """
    self.x = zeros((self.n, self.d))
x
有一个维度时,结果与
x
有多个维度时不同


如果
x
具有多个维度,则
self.w.reformate(1,self.n)
将给出正确的结果。如果
x
只有一个维度,
self.w.reformate(self.n,1)
会给出正确的结果。事实上,我并不认为我真的理解广播,所以每次我看到它时,我只是侥幸使用它。

这是广播的一个很好的解释,它将更容易迫使
x
在开始时具有一致的维度,而不是尝试在几个点上容纳1对2d。