我一直在学习 ANN,但我正在阅读的书中有 Python 示例。问题是我从来没有用 Python 写过代码,这些代码行对我来说太难理解了:
sizes = [3,2,4]
self.weights = [np.random.randn(y, x)
for x, y in zip(sizes[:-1], sizes[1:])]
我读了一些关于它的东西,发现 randn()
函数返回一个包含 y
元素和 x
维度的数组0 到 1 之间的随机数。zip()
将两个数组合二为一。 sizes[:-1]
返回最后一个元素,sizes[1:]
返回没有第一个元素的数组。
但尽管如此,我仍然无法向自己解释这会产生什么。
最佳答案
sizes[:-1]
将返回子列表 [3,2]
(即除最后一个元素之外的所有元素)。
sizes[1:]
将返回子列表 [2,4]
(即除第一个元素之外的所有元素)。
zip([a,b], [c,d])
给出 [(a,c), (b,d)]
。
所以压缩上面的两个列表给你 [(3,2), (2,4)]
权重的构建是一个list comprehension .因此这段代码等同于
weights = []
for x,y in [(3,2), (2,4)]:
weights.append(np.random.randn(y, x))
所以最终结果会是一样的
[ np.random.randn(2,3),
np.random.randn(4,2) ]
关于Python奇怪的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088268/