1.2_实现Variable类
1.2 实现Variable类
变量的英语是 variable。这里我们把 DeZero 的变量以 Variable 类的形式实现。补充一句,类名首字母大写是 Python 的一条常见的编码规则。这条规则记载在 Python 的 PEP8 编码规范中。
下面编写代码,让Variable类具备“箱子”的功能。实现这个功能的最简代码如下所示。
steps/step01.py
class Variable: def__init__(self,data): self.data $\equiv$ data上面的代码所做的是在初始化时,将传来的参数设置为实例变量 data。虽然这段代码很简单,但它可以让 Variable 类作为“箱子”使用,因为实际的数据被保存在 Variable 的 data 里。结合下面的使用示例,我们能更清晰地看出这一点。
steps/step01.pyimport numpy as np
data = np.array(1,0)
x = Variable(data)
print(x.data)运行结果
1.0
这个例子使用了NumPy的多维数组来保存放入“箱子”里的数据。例子中的x是一个Variable实例,实际的数据在x里面。换言之,x不是数据,而是存放数据的实体,也就是一个存放数据的“箱子”。

本书在展示代码时,会在代码的右上角标明它出自哪个文件。在上面的示例代码中,代码的右上角写着steps/step01.py,这表示你可以在本书的随书下载文件①中的step/step01.py中找到这段代码。有些示例代码的右上角没有记载文件名,这种情况意味着随书下载文件里没有对应的代码文件。
机器学习系统使用多维数组作为底层数据结构。因此,DeZero的Variable类要设计成只能处理NumPy多维数组的形式。NumPy多维数组的类是numpy.ndarray(np.ndarray)。如前面的代码所示,我们可以使用np.array函数来创建它的实例。另外,本书后面在提到numpy.ndarray实例时,都将其简称为ndarray实例。
接下来为前面代码中的 赋新的数据。代码编写如下。
steps/step01.pyx.data = np.array(2,0)
print(x.data)运行结果
2.0
如这段代码所示,只要按照 .data = ... 的方式编写, 就会被赋上新的数据。这样Variable类就可以作为一个“箱子”使用了。
以上就是步骤1实现的所有代码。虽然现在Variable类只有3行代码,但我们会在此基础上将DeZero打造成一个现代框架。