lua编程语言里面的小括号,中括号,大括号怎么用,或者说在哪些地方要用括号?

小括号--函数参数
中括号--table元素序号;多行文本
大括号--定义table时使用

 

大括号 用于单元阵列的赋值
中括号 用于形成一个向量或矩阵
小括号 通常用于一般的算术表达式,指示优先运算,还用于表示函数变量、向量下标和矩阵下标等到

 

矩阵赋值

这个很重要!
matlab的‘=’是直接分配新的空间的。然而,torch为了加快速度。直接用’=’对于Tensor来说是不分配空间的,它只是一个引用而已,或者说是别名!
matlab : matOut = matIn
Torch: matOut = matIn:clone()
clone和copy没啥区别,只是copy写的时候比较麻烦,就用clone好了

lua中"#" 意思

取表(table)中元素的个数。

比如tags[#tags+1]=tag
还有好多变量前有#号,这是什么意思啊

一般来说是获得一个table的长度(即元素数),但这个操作符实际上陷阱很多
#的实际作用是获得一个table中最大的数字键值,比如:
t = {"a", "b", "c", "d"}
#t --输出是4
而tags[#tags+1]=tag就是一个常见的用法,在tags这个table的末端插入一个新元素tag
但由于上面说的,#仅对键值连续的数值键值有效,因此
1、当键值为字符串等其他类型时,该操作符返回的值无法确认,比如
t = { x = "a", y = "b", z = "c"}
#t --输出是0
2、当键值为数值但不连续时,比如:
t = {"a", "b", "c"}
#t -- 同第一个范例,此时正常为3
t[5] = "e"
#t --此时输出依然为3,因为t[4]为nil,计数到3处停止

综上,如果你的table是纯粹当一个连续的数组在用,那么#t是很方便的获得table长度的方法;但如果你的table中key的数值不连续,或者有其他类型的key那么还是不要指望#能给出多有意义的结果来……

 

用”{ }”来提取

上面的用函数的方式可能还是有点儿麻烦。matlab有类似(:, : ,1:2)的写法。那么lua呢?
语法:
1. [ {dim1 , dim2, …} ]来获取某些维度。类似select
2. [ { {dim1s, dim1e}, {dim2s, dim2e},… } ] 来进行类似narrow或是sub的裁剪。

x = torch.Tensor(5,6):zero()
x[{1,3}] = 1 --等价于matlab的 x(1,3) = 1
x[ {2, {2,4}} ] = 2 --等价于matlab的 x(2,2:4) = 2
x[ { {}, 4}] = -1 --等价于matlab的 x(:,4) = -1
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值