Python奇怪的语法

Rok*_*ner 3 python arrays for-loop numpy neural-network

我一直在学习人工神经网络,但我正在阅读的书中有Python的例子.问题是我从未用Python编写过这些代码行太难以理解:

sizes = [3,2,4]
self.weights = [np.random.randn(y, x) 
                    for x, y in zip(sizes[:-1], sizes[1:])]
Run Code Online (Sandbox Code Playgroud)

我读了一些关于它的东西,发现该randn()函数返回一个数组,其中y元素和x维度填充了0到1之间的随机数.zip()将两个数组连接成一个.sizes[:-1]返回最后一个元素并sizes[1:]返回没有第一个元素的数组.

但是有了这些,我仍然无法向自己解释这会产生什么.

Cha*_* S. 5

sizes[:-1]将返回子列表[3,2](即除最后一个之外的所有元素).

sizes[1:]将返回子列表[2,4](即除第一个之外的所有元素).

zip([a,b], [c,d])[(a,c), (b,d)].

所以压缩上面的两个列表给你 [(3,2), (2,4)]

权重的构建是列表理解.因此这段代码相当于

weights = []

for x,y in [(3,2), (2,4)]:
       weights.append(np.random.randn(y, x))
Run Code Online (Sandbox Code Playgroud)

所以最终的结果将是相同的

[ np.random.randn(2,3), 
  np.random.randn(4,2) ]
Run Code Online (Sandbox Code Playgroud)