1--如第二章所讲,Tensor的本质是矩阵或数据数组
2--对Tensor的操做分类函数
|----API分类spa
|------torch中定义的: t.f(a,b)orm
|------tensor的成员函数: a.f(b)对象
|----按对tensro的做用分索引
|------不会改变自己 : 返回第三变了内存
|------会改变自己 : 修改自身的, 同名方法+ 下划线 都表示这个方法是修改自身的element
3--Tensor的建立form
|----t.Tensor(a,b): 建立一个a×b的tensor,值为随机,t.Tensor((a,b)):以list(a,b)建立一个tensor,二者不同select
|----t.ones(),t.zeros():建立全1,全0对象
|----t.eye(),建立单位矩阵(对角线为1的矩阵)|为何只有一个方向的对角线?由于子矩阵中上下顺序能够变换
|----t.arange(a,b,s) 建立1维数据,从a到b,s为步进值
|----t.linspace(a,b,s) 建立1维数据,从a到b分红s分,可是s不能是1,至少是2
|----t.rand(),t.randn(), 前者随即分布,后者正态随即分布
|----t.normal(m,s),t.uniform(f,to),正太分布,均匀分布 ? 不知道有什么区别 ??
|----t.randperm(m)随机排列, 即 1-m随机排列产生一个一维数组
4--Tensor属性访问
|----查看Tensor的大小(维度 ) a.size(),a.shape(),二者等价
|----查看总元素个数 a.numel() == a.nelement()
5--Tensor数据层面上的修改
|----a.view(a,b),会修改其维度,可是数据总量不会改变 且返回新的对象b,但a与b共享内存,只是对内存的解析不一样
|------当view的参数含有-1时,该参数会根据另外一个参数计算当前的参数
|----a.squeeze(dim) 缩减某个维度,可是只有能缩减的时候才会生效,实验的时候发现只有通过unsqueeze出的维度才能缩减
|----a.resize_(), 当缩小时,不见的内存依旧保存,当变大时,会自动扩增内存
6--Tensor的索引
|----下标运算[ ],很骚气,脚本语言的好处了吧
|----方法类: 注意 要分清 dim 和 index的区别
|------t.index_select()
|------t.masked_select(),就是掩图,可是是ByteTensor
|------t.non_zero()
|------gather() 在某维度的方向上 进行选取,略复杂
|------scatter_() 与 gather操做相反