我正在使用
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)
给出正确的结果。其实我不认为我真的很了解广播,所以每次看到它时,我只是运气而已。