2024-10-01 04:49:46 发布
网友
如果我的嵌套for循环计算了如图所示的数组,那么如何在不使用任何循环的情况下用Numpy写出这个结果呢?你知道吗
for i in range(self.output): for j in range(self.input): for k in range(self.hidden): #self.delta_wh[i, j, k] = -self.output_deltas[i]*self.wo[k, i] * self.dsigneth[k] * self.outi[j]
大部分工作可以由np.ix_完成,只有wo需要一些手工工作。我缩短了变量名:
np.ix_
wo
>>> import numpy as np # sizes >>> i, j ,k = 2, 3, 4 # fake data >>> od = np.arange(i) >>> wo = np.arange(k*i).reshape(k, i) >>> ds = np.arange(k) >>> ou = np.arange(j) # prepare for broadcasting >>> OD, OU, DS = np.ix_(od, ou, ds) >>> WO = wo.T[:, None, :] # now the shapes are: # OD (i, 1, 1) # OU (1, j, 1) # DS (1, 1, k) # WO (i, 1, k) # do the calculation and check shape >>> (-OD*WO*DS*OU).shape (2, 3, 4)
这是我的版本(在数组名前面加上self.):
self.
delta_wh = -(output_deltas * wo).T[:,None,:]*np.outer(dsigneth, outi).T[None,:,:]
或者,使用@PaulPanzer的符号:
delta_wh = -(od * wo).T[:,None,:]*np.outer(ds, ou).T[None,:,:]
大部分工作可以由
np.ix_
完成,只有wo
需要一些手工工作。我缩短了变量名:这是我的版本(在数组名前面加上
self.
):或者,使用@PaulPanzer的符号:
相关问题 更多 >
编程相关推荐