了解python语法



有人可以帮助下面的代码片段吗?

  1. (e, x), y = d
  2. yhat = atom_count @ w + b
  3. baseline_val_loss = [0.0 for _ in range(epochs)]

我正在寻找上述三行的口头解释,因为我从未在shell脚本中看到这些语法。我正在学习的代码是位于https://dmol.pub/applied/QM9.html

一本书的一部分。

(1)(e, x), y = d

你在这里所做的实际上是解包将变量d中的值放入元组(e, x)和变量y中。这只适用于d与左侧的格式相同的情况。

例如,假设d = ((3, 3), 4)。然后:

d = ((3, 3), 4)
(e, x), y = d
print(e) # prints 3
print(x) # prints 3
print(y) # prints 4

更简单的例子是:

a, b = 2, 3
print(a) # prints 2
print(b) # prints 3
(x, y, z) = (10, 20, 30)
print(x) # prints 10
print(y) # prints 20
print(z) # prints 30

唯一的区别是,在你的例子中,你使用的是一个元组,因此你需要正确地解包所有的值。

(2)yhat = atom_count @ w + b

@运算符是用于矩阵乘法的运算符,在Python 3.5中添加。

在这里你本质上声明了一个变量yhat,它等于矩阵atom_countw+b的矩阵乘法。例如:

import numpy as np
A = np.array([
[1, 2],
[3, 4]
])
B = np.array([
[4, 5],
[6, 7]
])
print(A @ B) # prints [[19 22]
#         [43 50]]

(3)baseline_val_loss = [0.0 for _ in range(epochs)]

这叫做列表推导式。这是一种初始化列表的方法,而不是编写冗长的for循环。这里你正在初始化一个名为baseline_val_loss的列表,其中epochs为零。

如果您有epochs = 10,那么您将得到一个包含10个零的python列表。range函数创建一个从0到epochs - 1的列表。你可以使用_作为变量来迭代,因为你根本不关心当前的循环值;你不能用它做任何事。

最新更新