更改尺寸时从广播获得不同的结果

时间:2018-07-26 07:40:29

标签: python numpy numpy-broadcasting

我正在使用 sum(self.eval_h(self.x) * self.w.reshape(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.reshape(1, self.n)给出正确的结果。如果x仅具有一维,则self.w.reshape(self.n, 1)给出正确的结果。其实我不认为我真的很了解广播,所以每次看到它时,我只是运气而已。

0 个答案:

没有答案