这一部分笔记讲解的是数据的一些操作及其预处理,涉及torch库,numpy库,以及pandas库,有疑问可以直接搜这些库。
1. N维数组是机器学习和神经网络的主要数据结构。
下面是N维数组样例:
2. 创建数组
访问元素
在jupyter中实践一下,import numpy
引入numpy库
定义一个二维数组:
而后访问一些元素:
前四个访问都好理解,只需要注意索引是从0开始,和别的编程语言一样,且冒号左右指的是一个左闭右开的区间,然后最后一个子区域[::3,::2]中的元素,指的是每跳3行且每跳2列访问元素,具体语法可以学习numpy中的数组操作。
python中的数组其实叫列表,不过这并不重要
3. 张量 表示一个数值组成的数组,但这个数组可能有多个维度。
我们可以通过shape
属性访问张量的 形状 和张量中元素的总数
注意numel()是直接返回int类型的元素个数
要改变一个张量的形状而不改变元素数量和元素值,使用reshape
函数
使用全0、全1、其他常量或者从特定分布中随机采样的数字
通过提供包含数值的 Python 列表(或嵌套列表)来为所需张量中的每个元素赋予确定值
常见的标准算术运算符(+、-、*、/ 和 **)都可以被升级为按元素运算
还有许多其他运算,比如指数运算
把张量 连结(concatenate) 在一起
这里dtype
是指定float32类型,dim
是指定维度。
通过 逻辑运算符 构建二元张量
对张量中的所有元素进行求和会产生一个只有一个元素的张量
即使形状不同,我们仍然可以通过调用 广播机制 (broadcasting mechanism) 来执行按元素操作
广播机制
由于广播机制的存在,要十分注意代码的逻辑,防止出现意外的数组结果,这会导致代码在运行,但结果可能完全不对,而你又找不到问题出在哪儿…
可以用 [-1] 选择最后一个元素,可以用 [1:3] 选择第二个和第三个元素
除读取外,我们还可以通过指定索引来将元素写入矩阵
为多个元素赋值相同的值,我们只需要索引所有元素,然后为它们赋值
运行一些操作可能会导致为新结果分配内存
执行原地操作
如果在后续计算中没有重复使用 X,我们也可以使用 X[:] = X + Y 或 X += Y 来减少操作的内存开销
转换为 NumPy 张量
将大小为1的张量转换为 Python 标量
创建一个人工数据集,并存储在csv(逗号分隔值)文件
从创建的csv文件中加载原始数据集
为了处理缺失的数据,典型的方法包括 插值 和 删除 , 这里,我们将考虑插值
对于inputs中的类别值或离散值,我们将“NaN”视为一个类别
这里的操作是将原来 Alley列进行特征处理,变成Alley_Pave列和Alley_nan列,其中Alley_Pave列指的是如果值原来为Pave则填充1,否则填充0,Alley_nan列则与反过来填充。
现在inputs和outputs中的所有条目都是数值类型,它们可以转换为张量格式
突然意识到自己都是贴的图片,应该把代码放上来
本文源代码 lesson01
链接:https://pan.baidu.com/s/1tj6qHFFuQ1GmVuWzwS1TLw
提取码:d2lc