## Tensor
###
> 必备知识:矩阵的算法。
Tensor是Torch提供的一套矩阵的算法封装,我们可以用tensor来任意创建多维矩阵并且进行相关的计算\(相加,相乘,选取,裁剪等\)操作.
#### I.初始化数组
```lua
z = torch.Tensor(3,4,2,3,5) --可以创建多维(这里是5维)数组。里面是随机的数。
s = torch.Tensor(2,3):fill(1) --创建二维数组(2行3列),用1填充
t = torch.rand(3,3) --创建二维数组(2行2列),用随机小数填充
m = torch.zeros(3,3) --创建二维数组(3行3列),用0填充
```
#### II.访问数组属性
```lua
z = torch.Tensor(3,4) --创建二维数组(3行4列)
x = z:nDimension() -- 显示当前数组的维度,2
y = z:size() -- y的值为size2的一维数组。3和4
t = z:nElement() -- 元素个数 12
```
#### III.复制
```lua
x = torch.Tensor(4):fill(1)
y = torch.Tensor(2,2):copy(x) --也可以实现不同Tensor的复制。
```
#### IV.Tensor的提取
> ## 用函数提取 select/narrow/sub {#selectnarrowsub}
select是直接提取某一维;
narrow是取出某一维并进行裁剪;
sub就是取出一块,是对取出的所有维进行裁剪。
**语法:**
select\(维度, index\);
narrow\(维度, 起始下标, 终止下标\);
sub\(1维的开始下标, 1维的结束下标, 2维的开始下标, 2维的结束下标, …\)
```lua
x = torch.Tensor(3,4)
i = 0
x:apply(function()i = i+1 return i end)
--[[
x 为
1 2 3 4
5 6 7 8
9 10 11 12
]]
selected = x:select(1,2) --第一维的第二个。就是第二行。相当于x[2]
narrowed = x:narrow(2,1,2) --截取x矩阵的第二维度中的从1到2元素,这里的第二维度是列,即,取第二列和第三列
--[[
th> narrowed
1 2
5 6
9 10
]]
subbed = x:sub(1,3,2,3) --第一维度 取1-3(第一行到第三行), 第二维度 取2-3(第二列到第三列)
--[[
2 3
6 7
10 11
]]
```
> ## 用”{ }”来提取 {#selectnarrowsub}
- 1 Lua介绍及环境
- 2 基本语法
- 3 数据类型
- 4 Lua 变量
- 5 循环
- 6 流程控制
- 7 函数
- 8 运算符
- 9 字符串
- 10 数组
- 11 迭代器
- 12 table
- 13 Lua 模块与包
- 14 Lua 元表(Metatable)
- 14.1 元表案例
- 15 Lua 协同程序(coroutine)
- 16 Lua 文件IO
- 17 Lua 面向对象
- 17.1 类
- 17.2 继承
- 17.3 封装
- 18 Lua 与 Mysql
- 19 Lua 与 redis
- 20 Lua 与 JSON
- 21 Lua 与 http
- 22 Lua 与 Nginx
- 22.1 Nginx_Lua的安装及环境
- 22.2 ngx_lua API(全表)
- 22.3 常用命令介绍
- 22 Lua 人工智能
- (1) Torch的安装
- (2)Tensor
- Lua与C混合编程