19.2_实例变量ndarray
19.2 实例变量ndarray
Variable起到包裹数据的“箱子”的作用。不过对Variable的用户来说,重要的不是“箱子”,而是其中的数据。因此,我们需要让Variable看上去是数据,即“透明的箱子”。

如步骤1所述,数值计算和机器学习系统使用多维数组(张量)作为底层数据结构。因此,Variable类作为ndarray的“专用箱子”使用。这里我们的目标是让Variable实例看起来像ndarray实例。
Variable中有ndarray实例。ndarray实例内置了几个多维数组的实例变量,比如下面代码中使用的实例变量shape。
>>> import numpy as np
>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> x.shape
(2, 3)如上面的代码所示,多维数组的形状可以通过实例变量 shape 获取。顺带一提,上面的结果 (2, 3) 相当于数学中的 矩阵。下面我们将这个操
作扩展到Variable实例。具体实现如下。
steps/step19.py
class Variable:
...
@property def shape(self): return self.data.shape上面的代码实现了 shape 方法,这个方法取出了实际数据的 shape。这里比较重要的一点是在 def shape(self): 之前加上一行 @property。这样一来, shape 方法就可以作为实例变量被访问。我们来试着操作一下。
steps/step19.py
$\mathbf{x} =$ Variable(np.array([[1,2,3],[4,5,6]])) print(x.shape)#用x.shape代替x.shape()来访问运行结果
(2,3)
我们可以按照上面的方式通过实例变量 shape 取出数据的形状。之后可使用同样的做法将 ndarray 的实例变量添加到 Variable 中。这里添加以下 3 个新的实例变量。
steps/step19.py
class Variable:
...
@property def ndim(self): return self.data.ndim
@property def size(self): return self.data.size@property
def dtype(self):
return self.datadtype上面的代码添加了 ndim、size 和 dtype 这 3 个实例变量,其中 ndim 是维度,size 是元素数,dtype 是数据类型。这样就完成了向 Variable 添加实例变量的工作。ndarray 中还有很多实例变量,当然,这些变量都可以添加进来。不过这项工作很枯燥,本书就不带领大家一一操作了,请读者根据实际需要自行添加。

到目前为止,本书并没有特别提到ndarray实例的dtype。如果不指定dtype,ndarray实例将被初始化为float64或int64(取决于实际环境)。神经网络经常使用的是float32。