Python奇怪的语法

标签 python arrays for-loop numpy neural-network

我一直在学习 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/

相关文章:

python - 如何禁用标准错误流的日志记录?

python - 根据另一个文件中的行号从一个文件中提取行

python - 通过用户定义的索引用 np.nan 替换 np.array 值的最干净的方法

python - 如何修复 Graphite 中的守护进程导入错误?

c# - 使用 LINQ 计算 float 数组的平均值

r - 使用数据帧 : collecting results into one data frame in R

java - 一个 while 循环,其中包含一个 if 语句和一个 for 循环

javascript - 在 Google 表格脚本中获取值时的最佳实践

c - C中数组的地址等于它的第一个元素吗

python - 引用所需字典(Python)索引的更简单方法?