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。