Lua 正确处理可变参数
为了在 Lua 里处理可变参数,我们可能会写下面这样的代码:
local function args(...)
if next({...}) then
for _, v in ipairs{...} do
print(v)
end
else
print("empty var")
end
end
args(10, 20, 30)
– output:
– 10
– 20
– 30
咋一看,貌似没什么问题,但是当传入 args(10, nil, 30) 时,发现并不符合我们的预期:
-- output:
-- 10
原因就在于 ipairs 遍历的 table 必须是一个序列。序列的数字索引必须连续。table 中间包括 nil,这样的 table 就不是序列,例如:a={10, nil, 30} 它不是序列,因为它的数字索引是 1 3 不是连续的, 所以它不是序列。为了处理这个问题,就要引入 select 了。
调用 ...
财务分析与估值 Financial Analysis and Valuation
入门别放弃。
企业的价值评估和资产评估是两个不同的概念。
估值——对企业或股权进行估值的过程。
价值组成/来源:主营业务、非经营性净资产——>企业价值 ——>价值分配:负债、其他资本索取权、普通股权益
两类思路:
贴现现金流方法:通过企业创造的(或者股东能够获得的)未来收益进行估值。
乘数法:通过与其他同类型企业的比较进行估值。
资金的时间价值:今天的一块钱 != 明天的一块钱 ,不同时间获得的钱不能简单相加
贴现:将未来的钱折换成今天的钱现值=E/(1+r)t
r为贴现率企业的价值 = E + E/(1+r) + E/(1+r)² + E/(1+r)³ + …… = E/r
永续年金——自由现金流维持稳定增长/数额
预期收益债权人 —— 利率股东 —— 机会成本
风险与收益相伴相随
股东预期收益/要求回报率:用行业平均盈利水平衡量股东要求公司给的回报 —— 权益资本成本
加权平均资本成本wacc
资本资产定价模型CAPM: E(Re) = Rf + β*(Rm - Rf)E(Re)权益资本的期望值Rf无风险收益率Rm市场收益率Rm-Rf风险溢价β反映某个公司与市 ...
Evaluation Indicators
假设测试集中有类别为A、B、C的三种class。现在要对class A 的recall、precision和AP进行评估。
$quad$
class A
class not A
Test says “A”
True positive
False Positive
Test says “not A”
False positive
True Positive
公式为:召回率 Recall = TP / (TP + FN)准确率 Precision = TP / (TP + FP)
也就是说,recall是一张图片中检测出来的目标占所有目标的比例,即“召回”的比例;precision是每个检测出来的目标的准确率。
代码如下:123456789101112131415161718192021222324252627import numpy as npdef (preds, labels): num_cls = preds.shape[1] batch_size = preds.shape[0] labels_hot = np.zeros((ba ...
对LuaJIT制作的游戏的简单修改(一)
本次修改的游戏是一个使用了LuaJIT制作的梦幻西游类单机游戏,名字叫做《梦战:碧海旭梦》。 这个游戏在我的硬盘里放了有很长一段时间了,当时水平有限,就没有再修改,直到这几天才重新开始研究。 网上关于LuaJIT的分析资料并不多,而有关单机游戏修改的是没有了,所以我基本上是从零开始研究。 经过几天不断的研究,终于对LuaJIT有了一点点了解,也找到了一些修改的方法。 不过说实话研究这个东西没什么用处,纯粹是我的兴趣,各位姑且看看就好。 因为我也是新手,所以文章中难免有很多错误,如果发现错误请一定要告诉我。
什么是Lua?和LuaJIT有什么关系?Lua是一个脚本语言,通常是用来嵌入应用程序中的,在游戏中的应用范围也很广,尤其是手游。
而LuaJIT则是Lua的一个高效版本。
用好Lua+Unity,让性能飞起来—LuaJIT性能坑详解 这篇文章对LuaJIT的工作原理有了一定的阐述。 若想了解更多,可以去官方网站看看。
Lua:The Programming Language Lua
LuaJIT:The LuaJIT Project
LuaJIT的字节码和虚拟机LuaJIT ...
Lua 排序算法
快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
算法步骤
从数列中挑出一个元素,称为 “基准”(pivot)
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
对 “基准” 左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
动画演示
Lua 实现
local function partition(list, low, high)
local low = low
local high = high
local pivotKey = list[low] -- 定义一个中介值
<span class="c1">-- 下面将中介值移动到 ...
Lua作图教程之设计模式
前言前段时间学校游戏开发课大作业,做了一个Roguelike的恐怖游戏。搜集整理了一些迷宫生成的算法。
当初也受了indienova上一些文章的启发。现在在此把学到的一些东西理一理分享出来。
第一次写这种东西,感觉有点啰嗦,还请大家不要介意,也可以直接看项目地址
代码写在Unity环境下,应该可以直接使用。
第一种算法先上一张图
这是我最早拍脑袋凭着感觉写的一个算法结果,给定区域长宽和分支概率,可以生成一张迷宫图。
这完全就是随机挖洞大法,其步骤如下:
计算当前扫描点周围可以挖的方块
随机选一个方块挖开
若周围还有可挖方块,按分支概率随机挖开另一方块,设为新扫描点
所有扫描点执行 1 操作
若周围无方块可挖,中止此扫描点工作。
可以看出,这个算法有相当的缺陷,生成的迷宫总面积不可控,在运气不好的极端情况下,会产生比预期面积小很多的迷宫。
即使我们将分支概率调到100%,依旧会有黑色的空洞存在:
而且生成的迷宫非常扭曲怪诞,这很克苏鲁。或许我们可以风格化一下……
此时的迷宫已经勉强可以使用,但是与传统迷宫的差别依旧非常大。
它的斜线非常多。这会使得游戏过程中包含八个方向,对玩 ...
fblualib在ubuntu 16.04上的安装
最近需要复现一下CRNN的结果,因为自己实现的版本点数不够高,所以需要跑一下人家的代码。一共有两个依赖,一个是TORCH,这个好装,另一个是fblualib,这个项目已经停止维护了,真的是跳了无数个坑,这里做一个记录。最后也只能跑inference不能train BTW. 但是对于其他跳坑的人可能也是有帮助的.
概览
torch
cudnn.torch
googletest
folly
mstch
zstd
googletest
wangle
fbthrift
thpp
fblualib
CRNN
各种报错的解决办法
概览首先是需要安装的包fblualib,folly,mstch,zstd,wangle,thpp,fbthrift其次:system:ubuntu 16.04,相比来说14.04应该更好装python:2.7,之前试了python3,但是在import frontend的时候遇到了一些问题,没有解决好,就放弃了,其实是有希望的。
torchcommit 0219027e6c4644a0ba5c5bf137c989a0a8c9e01b
cudnn.torch1git c ...
Lua中模块[modlue]
require 直接引入文件-- aa.lua文件
function showName( v )
-- body
print ("哦哈呦"..v)
end
-- a.lua 文件内引入aa.lua文件
require "aa"
showName("n加奈")
-- 引入路径文件 app/test/cc.lua
-- require("app.test.cc")
编写基本modlue模块-- mymodlue.lua 文件
– 创建table
complex = {
}
function complex.showName( )
– body
print ('靠你起哇')
end
– 返回table
return complex
引用modlue函数(table中的函数)– 引入modlue
local t = require "mymodlue"
t.showName()
lua
设计目的其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 特性
轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
其它特性:
支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。
Hello World!1print("Hello World!")
交互式编程
123> print("Hello World!")> Hello Wor ...
Lua作图教程之开发调试环境搭建
5.1 以后就没有很好的lua IDE可用了,luastudio不错但是小贵,发现有位仁兄写了个 visual studio code的lua调试插件,试了一下还不错 插件源码.
环境搭建
去微软官方下载vscode 软件下载地址.
安装Lua 5.3 Debug 插件,在vscode中按Ctrl+P,输入 ext install lua-debug
vscode的调试需要在一个文件夹中,随便建一个文件夹比如叫luaproject 里面建一个lua文件叫run.lua
配置调试工具
打开lua的调试配置
直接调试lua文件修改lanuce里面的program项
12345678910111213141516171819202122232425262728293031 { "version": "0.2.0", "configurations": [ { "name": "launch", "typ ...