我需要在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后端,并有许多技巧来优化表达式,因此您可以忽略许多技术细节。另外,对不同类型的数据重用变量名会造成混淆,也是不好的做法。