写在最前
Sinet库经过四次迭代之后总代码量超过14000+行(包括YAML的话),确实是有点臃肿,打包大小约为100m+,所以拆分肯定是要有的,因此我之后会发几个专刊将现有Sinet拆分。由于Sinet是持续更新并且相互之间有些依赖关系比较复杂,我个人更喜欢Sinet包含所有,因此在专刊中关于一些类可能会有功能上的删减。为了更好地体验,建议自己去理解源码去选择合适的搭配,我个人感觉源码整体上还是比较美观的。
重要更新概览
这次主要更新了Numpy和一些Python常用的基础函数
看下面关于贝叶斯推断Python部分源码和AHK源码的比较
Python
import numpy as *
def words2Vec(vecList, inputWords) :
resultVec = [0] * len(vecList)
for word in inputWords :
if word in vecList :
resultVec[vecList.index(word)] += 1
else :
print('没有发现此单词')
return array(resultVec)
AHK
words2Vec(vecList, inputWords)
{
resultVec := List(0)
resultVec.multiple(vecList.Length)
For word in inputWords
{
if Sinet.In(vecList, word) !== "Not Found"
resultVec[Sinet.List.Index(vecList, word) - 1] += 1
else
print('没有发现此单词')
}
return Numpy.array(resultVec)
}
可以看到在代码层面对于各类Python的语句都有着转换函数。这也是Sinet创造的初衷。再看一段更相似的,除了在四则运算时需要用到函数外,其余功能基本复刻。
def trainNB(trainMatrix, trainClass) :
numTrainClass = len(trainClass)
numWords = len(trainMatrix[0])
p0Num = ones(numWords)
p1Num = ones(numWords)
p0Words = 2.0
p1Words = 2.0
for i in range(numTrainClass) :
if trainClass[i] == 1 :
p1Num += trainMatrix[i]
p1Words += sum(trainMatrix[i])
else :
p0Num += trainMatrix[i]
p0Words += sum(trainMatrix[i])
p0Vec = log(p0Num / p0Words)
p1Vec = log(p1Num / p1Words)
pClass1 = sum(trainClass) / float(numTrainClass)
return p0Vec, p1Vec, pClass1
AHK
trainNB(trainMatrix, trainClass)
{
numTrainClass := trainClass.Length
numWords := trainMatrix[0].array.Length
p0Num := Numpy.ones([numWords])
p1Num := Numpy.ones([numWords])
p0Words := 2.0
p1Words := 2.0
For i in Range(numTrainClass)
{
if trainClass[i] == 1
{
p1Num := Numpy.Plus(p1Num, trainMatrix[i])
p1Words += Numpy.sum(trainMatrix[i])
}
else
{
p0Num := Numpy.Plus(p0Num, trainMatrix[i])
p0Words += Numpy.sum(trainMatrix[i])
}
}
p0Vec := Numpy.log(Numpy.Div(p0Num, p0Words))
p1Vec := Numpy.log(Numpy.Div(p1Num, p1Words))
pClass1 := Numpy.sum(trainClass) / float(numTrainClass)
Return [p0Vec, p1Vec, pClass1]
}
顺便附一张运行结果图,这个是NLP类的贝叶斯推断。
更新日志
v1.0.6.29
1.更新Sinet类
(1)引入Sinet.Algorithm.LucasKanad(Number:=-1,Video:=0,Show:=”mask”)用于进行稀疏光流跟踪。无返回值。
Show参数包括mask,Frame,Img。
(2)引入大量CV2.。。_Init()函数,用于初始化OpenCV相关类。
(3)引入Sinet.CV2.DNNImage(Image,Type:=”Caffe”,Model:-1,Show:=1)函数调用DNN进行图像检测分类。
v1.0.6.30
1.更新Sinet类
(1)引入Sinet.CV2.ImageMatch(Image,ImageTemp,Compare:=0,Show:=1)函数用于在Image中匹配ImageTemp。
返回值为一个List()类型列表,依次包含x、y、Width、Height。若Compare参数为1,则返回值包含匹配图与原图的相似度。
**注意Image大小需大于ImageTemp。建议使用前自行估计Temp在原图中大小,进行CV2.Resize(Temp,Width,Height)。
2.新增类Numpy,原附加于Sinet类中的Numpy同步废弃。(保留在源码中,但不再更新方法)
与Python相比,Numpy类预计不会加入任何类型转换相关的函数方法(这是由于AHK对于数据类型的弱检测性)
3.新增函数Dynloop_Loop(Data)用于解析二维嵌套动态数组的枚举问题。
Data := List(List(1, 2), List(3, 4, 5), List(6, 7, 8, 9))
Lst1 := Dynloop_Loop(Data)
Print Lst1
v1.0.7.01
1.更新Sinet类
(1)优化Sinet.Math.Base函数,现在支持二进制转十进制,同时十进制转二进制结果统一为8的倍数位。
(2)优化Sinet.String.Decode函数,现在Url解码支持中文。
(3)优化Sinet.String.Encode函数,现在Url加密支持中文。
(4)更新Sinet.Algorithm.Curve,引入DTW算法,若求取二维数组相关度,请保证x值一一对应,且y值长度相等。
Print Sinet.Algorithm.Curve([0.5,0.7,0.9,5.4,1.7,6.2],[5.5,3.3,4.5,6.7,5.8,2.1],"DTW")
**注意:取值越接近0相关度越好。
(5)引入Sinet.Algorithm.NLP函数用于收纳NLP相关算法实现。
2.更新Numpy类
(1)通过Numpy.array([…])初始化,类型为Numpy.NDArray
(2)自有属性包括ndim、shape、size
(3)支持通过”:”对该类型数组切片访问和修改值。
a := Numpy.array([[1,2,3],[1,2,3]])
print a["1:2"]
**注意由于AHK对象赋值办法比较弱,目前修改值仅支持三个层次。(最新版本支持无限维)
(4)逐步引入Python类似函数,目前支持Numpy.Sqrt、Numpy.Zeros、Numpy.Ones、Numpy.Size,用法与python一致
同时自写Numpy.Numbers(Shape,Number:=1)Number参数用于设定初始化值。
v1.0.7.02
1.更新Nunpy类
(1)引入自有函数Sum,Reshape。
(2)引入函数Numpy.Plus(NDArray*)用于多NDArray加法。
v1.0.7.03
1.更新Nunpy类
(1)引入自有函数Copy、Ravel、Transpose。
(2)引入函数Numpy.Transpose(NDArray)用于NDArray转置。
(3)优化修改值体验,现在支持无限维度。
(4)更新Numpy.Random类,包括函数Rand,Randn,Randint,(Randi,Randf)。
2.更新Sinet类
(1)引入Sinet.Algorithm.BoxMuller(Number)算法,用于生成符合标准正态分布随机数。
(2)引入Sinet.Random.Randn(Number),用于生成符合标准正态分布的随机数。
(3)引入Sinet.Math.Factorial(Number)用于计算数值阶乘,返回值为字符串(ahk中字符串用于数值计算时会自动转义)
**注意:该函数可进行大数运算,1000阶乘计算耗时约2秒。
(4)引入Sinet.Math.Combination(Population,Individual)和Sinet.Math.Permutation(Population,Individual)用于计算组合数和排列数
参数分别表示总体和个体,返回值为字符串(ahk中字符串用于数值计算时会自动转义)
**注意:该函数可进行大数运算,Sinet.Math.Combination(1000,500)计算耗时为毫秒级。
3.新增类ListNode类,用于进行链表操作。后续会引入Leetcode关于链表的好的算法。
nums := List(1, 4, 2, 7, 8, 5, 4)
head := ListNode(nums[0])
tmp := head
nums.RemoveAt(1)
for i in nums
{
cur_node := ListNode(i)
tmp.next := cur_node
tmp := tmp.next
}
print(head)
while head
{
print(head.val)
head := head.next
}
4.新增测试类ProMath,用于解决概率论相关问题。
**注意:该类仅为测试性功能,暂时没有填补实际功能。
P := ProMath()
P["a"] := 0.4
P["a&b"] := 0.3
Print P["b|a"]
v1.0.7.04
1.更新Sinet类
(1)新增Sinet.Functools类,用于承载等同Python的相应功能,目前引入Reduce(Function,IterObj)
lst := [2, 3, 4]
res := Sinet.Functools.reduce(Mul := Lambda(x, y) => x*y, lst)
print(res)
(2)引入Sinet.Function.Map(Function,IterObj)用法与原生Python的Map一致。
2.新增Set数据类型,即集合类型,初始化方式为Set([Iterable],…)若输入数据包含字符串,则会将字符串拆分。
x := set('runoob')
print x
(1)新增Calc(Set1,Sign,Set2)函数用于集合运算,返回值为新的集合。
*Sign可选包含”&,|,^,-“
3.更新NLP类
(1)引入BayesianClassify(wordsList,classVec,testWords,function:=”printClass”,tepClass:=1)用于进行贝叶斯推断。
wordsList := [['周六', '公司', '一起', '聚餐','时间'],
['优惠', '返利', '打折', '优惠', '金融', '理财'],
['喜欢', '机器学习', '一起', '研究', '欢迎', '贝叶斯', '算法', '公式'],
['公司', '发票', '税点', '优惠', '增值税', '打折'],
['北京', '今天', '雾霾', '不宜', '外出', '时间', '在家', '讨论', '学习'],
['招聘', '兼职', '日薪', '保险', '返利']]
classVec := [0, 1, 0, 1, 0, 1]
testWords := ['公司', '聚餐', '讨论', '贝叶斯']
NLP.BayesianClassify(wordsList, classVec, testWords)
4.更新Numpy类
(1)引入函数Numpy.(Add、Sub、Div、Mul)用于四则运算。
(2)引入函数Numpy.Arange用于创建Numpy.NDArray数组,参数与Range一致。
(3)引入函数Numpy.(Plus、Subtract、Divide、Multiple)用于多个同结构NDArray对应加减乘除运算。
(4)引入函数Numpy.(Exp、Log10、Log)用于对NDArray元素进行取对数等运算。
(5)引入自有函数Copy()用于对当前NDArray对象深拷贝。
(6)引入自有函数(Add、Sub、Div、Mul)用于直接对当前NDarray四则运算。
(7)引入自有函数Ravel()用于将当前NDArray对象展平为1维NDarray数组,且对该数组修改不影响源数据。
下载地址
链接: https://pan.baidu.com/s/1igPgrGqlVPjkcZB5N6N9WA?pwd=mono 提取码: mono 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v5的分享
提个建议:1.建议添加一些应用说明;2.社区文章是可以修改的,建议对一个分享长期更新,以保证帖子热度可以持续增长。
ok,谢谢建议。主要是每次写的东西比较杂,比较多,在学校没空给注释提示啥的,后边就这个项目算杂项更新,每周把概况说明一下,其他的再重新按数据类型和主要库分成两个模块,给点应用方面的例子啥的,争取建几个长期贴。?
这部分内容,我还是很感兴趣的
谢谢
可以把功能列出来,方便大家看到就能理解这个库是做什么的
我主要是几个目标吧 第一个是让v2语法更正式化,特别是更贴近python,这样去找一些功能的时候就可以考虑改写python相关内容。 第二个是自己把一些人工智能、图像识别的相关内容移植进来,这样可以看出ahk作为脚本语言上限也不低。 介绍功能的话,会像随机哥那样专门发一个单版面不写更新就把功能列一遍,不过最近考试多,还没时间去整
回复会吞换行欸
吞换行?没注意
第二个我觉得不错
七月考不考虑加一个Leetcode闯关模块 没这个plan的话我想开个模块,就专门发leetcode的关卡ahk版本写法?
leetcode是?
就介个
一个算法刷题平台?
学习,积分
更新不重开帖子,直接编辑如何?这样我就只用收藏一遍了?
唔,内容太多我怕贴一块太多了 累积更新是为了每个版本都可以留底 我想想吧?
我代表广大小白给大佬十一个大大的赞??????????????????????
其实吧,最新的是v1.0.7.09 社区首页没推荐那个版本 可能是觉得这个更重要叭?