如何在Python中广播列表?



我需要在Python中广播一个列表到更大的值。我正在研究一种不用Numpy的反向传播算法。在我有限的开发环境中,我无法访问它。

根据我的理解,当你在两个数组上使用numpy .dot()操作时,numpy将广播一个数组,如果它比另一个数组小,所以它们是相等的大小。

dW = np.dot(dZ, A_prev.T) / m 

Numpy如何处理广播一个数组当两个不可整除?也就是说,当两个数组的模不等于0时?

在我的例子中,我有两个列表;len(dZ)等于too 512, len(A_prev)等于too 741。我应该如何处理广播dZ,使其大小与A_prev相同?

目前为止我试过的是:

dZ = dZ * (len(dZ) + (len(A_prev) % len(dZ)))

然而,dZ是一个巨大的数字,大约16000。我不知道为什么。

你可以试试:

假设dz是一个3长度数组:

dz = [4,2,8]

和A_prev是11项数组:

A_prev  = [0]*11

将dz广播到A_prev的长度,执行以下操作:

dz = dz* (len(A_prev)//len(dz)) 
dz = dz + dz[:len(A_prev)-len(dz)] 

和现在dz是一个11项数组:

[4, 2, 8, 4, 2, 8, 4, 2, 8, 4, 2]

我认为您应该手动执行此操作并创建具有正确尺寸的新数组。Python的格言是显式总比隐式好。https://www.python.org/dev/peps/pep-0020/Numpy使用C后端,并有许多技巧来优化表达式,因此您可以忽略许多技术细节。另外,对不同类型的数据重用变量名会造成混淆,也是不好的做法。

最新更新