努比。将多个数组相乘生成三维数组

2024-10-01 04:49:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的嵌套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]

Tags: inselfnumpyforinputoutputdeltas情况
2条回答

大部分工作可以由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.):

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,:,:]

相关问题 更多 >