写在最前
Sinet库经过第五次迭代之后总代码量超过16000+行(包括YAML的话),确实是有点臃肿,打包大小约为100m+,所以拆分肯定是要有的,因此我之后会发几个专刊将现有Sinet拆分。由于Sinet是持续更新并且相互之间有些依赖关系比较复杂,我个人更喜欢Sinet包含所有,因此在专刊中关于一些类可能会有功能上的删减。为了更好地体验,建议自己去理解源码去选择合适的搭配,我个人感觉源码整体上还是比较美观的。
重要更新概览
这次主要更新了Pandas类型和部分Sklearn库的内容,以及一些常用的Python基础库
看下面关于NLP情感分析KNN模块简单示例Python部分源码和AHK源码的比较
Python
import numpy as np
from sklearn import neighbors #需要加载numpy,sklearn包,这两个都是机器学习或数据挖掘常⽤的包。
knn = neighbors.KNeighborsClassifier() #取得knn分类器
data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]) #data对应着打⽃次数和接吻次数
labels = np.array([1,1,1,2,2,2]) #labels则是对应Romance和Action
knn.fit(data,labels) #导⼊数据进⾏训练
print(knn.predict([[18,90]])) #传⼊参数为多维数组
AutoHotkey
#include <Sinet>
np := numpy
neighbors := sklearn.neighbors
knn := neighbors.KNeighborsClassifier()
data := np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])
labels := np.array([1,1,1,2,2,2])
knn.fit(data,labels)
print(knn.predict([[18,90]]))
这已经从运用层面上语句几乎无差异。目前Sklearn和Numpy还在完善。
更新日志
v1.0.7.05
1.更新Sinet类
(1)引入Sinet.Online.Cut(Text)用于在线分词。
(2)引入Sinet.Re.Split(Rules,String)函数,用法与Python一致。
2.新增类Itertools
(1)引入Itertools.Combinations(p,r)用于不重复顺序排列。
(2)引入Itertools.Combinations_With_Replacement(p,r)用于可重复顺序排列。
(3)引入Itertools.Permutations(p,r:=-1)用于不重复全排列。
(4)引入Itertools.Permutations_With_Replacement(p,r:=-1)用于可重复全排列。
(5)引入Itertools.Product(Param*)用于所有可迭代对象做笛卡尔积。最后一个参数可填”repeat=Number”,Number表示前面对象重复次数。
**Itertools.combinations_with_replacement(‘ABC’, 2)的返回值为
[[‘A’, ‘A’], [‘A’, ‘B’], [‘A’, ‘C’], [‘B’, ‘B’], [‘B’, ‘C’], [‘C’, ‘C’]]类型为List(List())。
3.新增类Sklearn
4.新增类Pandas,原附加于Sinet类中的Pandas同步废弃。(保留在源码中,但不再更新方法)
v1.0.7.06
1.更新Numpy类
(1)引入Numpy.Linspace(Stop,Start:=0,Num:=1,Endpoint:=True,Swap:=-1)用于生成均匀NDArray序列。
(2)引入Numpy.Linspaces(Param*)用于自定义标签设置,生成均匀NDArray序列。标签包括start=、stop=、num=、endpoint=
默认Start为0,Stop为1,Num为10,Endpoint为True
(3)引入Numpy.Argmax(NDArray,Axis:=”axis=-1″)函数,用法与Python一致,返回类型为List。
(4)引入Numpy.ToList(NDArray)函数用于将NDArray类型转换为List类型。
(5)引入Numpy.Reshape(Lst,Shape)函数将List类型转化成相应”形状”的新List类型。
(6)引入Numpy.Empty(Shape)函数,暂时同Zeros办法。
(7)引入Numpy.C_、R_函数用于多值行列扩展,返回类型为List()
np := Numpy
print np.c_(np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]]))
print np.r_(np.array([1,2,3]), 0, 0, np.array([4,5,6]))
(8)引入Numpy.Zeros_Like(NDArray)函数,用于返回与输入NDArray同形状的全零矩阵。
(9)新增Numpy.Linalg类用于包含线性代数中的函数方法。
(10)引入Numpy.Linalg.Norm(NDArray,Param*)用于进行范数求解。Param标签包括axis=、ord=、keepdims=
默认Axis为NDArray.ndim-1,Ord为2,Keepdims为False
**目前keepdims标签暂时无效。
(11)引入Numpy.ArgSort(Lst,Axis:=”axis=-1″)函数,用法与Python一致,返回类型为List。
(12)引入Numpy.DulSort(NDArray,CNDArray)函数,该函数为自定义函数,用于对CNDArray这样的协同数组进行排序。
即对NDArray排序,但交换结果体现在CNDArray中。
(13)优化Numpy.Random模块体验,现在这个模块返回值均为List类型,而不是NDArray对象。
**注意:原生的Numpy函数为统一返回值标准,除特别说明外类型均为NDArray,如果需要转换,请使用自定义的函数Numpy.ToList。
2.更新Pandas类
(1)引入新的数据类型DataFrame通过如下方式初始化:
a := Pandas.DataFrame({a:["A","C"],b:["M","N"],c:["B","E"]}, "index=(你好,中国)")
b := Pandas.DataFrame([["A","C"],["B","D"]], "index=(你好,中国)", "columns=(我在,这里)")
c := Pandas.DataFrame(Dict("a",["A","C"],"b",["B","D"]), "index=(你好,中国)")
d := Pandas.DataFrame(Numpy.array([["A","C"],["B","D"]]), "index=(你好,中国)", "columns=(我在,这里)")
括号可替换为[],逗号中英文皆可
**当使用Object对象和字典类型进行初始化时,对象会自动以字典序排列,即与原始排列方式不相同。
(2)修改标签可以通过直接设置xx.index:=Value实现。
**已知局限,设置时只能使用List()类型,否则会导致取0错误,同时当标签数与原行数不对等时,会造成一些错误。
(3)引入新的数据类型DataFrameGroupby,可通过DataFrame的自有属性Groupby创建。
3.更新标准函数Len()函数,支持大多数数据类型。
v1.0.7.07
1.修复了若干已知的关于List的Pop函数,Len函数返回值不合预期,DataFrame在特定情况下创建错误,Numpy部分函数参数与描述不符等问题。
2.明确Numpy类型进行赋值时,Value只支持Integer,String,Float,Numpy.NDArray四种类型的原意赋值。
3.明确Numpy使用运算函数时,会对输入的第一个参数进行修改,这属于符合逻辑的特性。
4.为了方便起见,DataFrame使用Groupby后原数据集不变,但使用更底层函数,例如sum时,会将Groupby对应的列移除。
5.更新Sklearn类
(1)引入Sklearn.Neighbors.KNeighborsClassifier类
(2)引入Sklearn.Neighbors.KNeighborsRegressor类
**该类仍处于测试阶段,目前已通过第一阶段测试,当足够移植Python项目时会具体介绍。
6.更新Sinet类
(1)引入基于Sklearn的KNN算法,调用方式为Sinet.Algorithm.KNN(Predict,Data,Labels,Default:=4)
Predict参数表示预测数据,Data参数表示现有数据,Labels参数表示数据标签。
data := Numpy.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])
labels := Numpy.array([1,1,1,2,2,2])
predict := [[18,90],[80,10]]
print(KNN(predict, data, labels))
**注意OpenCV内也有KNN办法。
7.更新Numpy类
(1)引入Numpy.Cmp(NDArray1,NDArray2)函数,效果与NDArray1==NDArray2一致。
(2)引入Numpy.Mean(NDArray,Axis:=”axis=-1″)函数,用法与Python一致,返回类型为NDArray。
(3)引入自有属性Mean(Axis:=”axis=-1″)
(4)引入Numpy.Var(NDArray,Axis:=”axis=-1″)函数,用法与Python一致,返回类型为NDArray。
(5)引入新的运算函数Pow(NDArray,Number*)用于乘方运算。
(6)引入Numpy.Random.Random(Shape*)函数用于标准随机生成指定形状的列表。
**注意,Numpy.Random类为拓展使用范畴,返回值均为List类型。
v1.0.7.08
1.优化Print显示和体验。
2.现在List类型支持切片访问,但暂不支持反向切片。
v1.0.7.09
1.更新Numpy类
(1)新增自定义函数Numpy.Offset(NDArray,Axis:=”axis=-1″)用于计算偏移量平方大小。
(2)更新Numpy.NDArray的枚举办法,现在可以用For…in语句访问
2.更新Pandas类
(1)新增函数Pandas.Read_Csv(Url,Option*)Option参数可选:header、sep、skiprows等,详见Python的Pandas相关用法。
**暂不支持多行作为标题行
[eg:data_url := “E:\Splunk\etc\apps\splunk_monitoring_console\lookups\assets.csv”
raw_df := Pandas.read_csv(data_url, “sep=,”, “header=1”)
print raw_df]
(2)优化DataFrame的展示体验
3.更新Sklearn类
(1)引入新的类DataSets用于加载自带数据集。
(2)引入Sklearn.DataSets.Load_Iris()调用自带。
4.优化Print输出,现在Print输出在一个独立窗口,窗口大小为r30 w800。
可以在你的代码中加入DynamicPrint_Init(),当你选中变量并Ctrl+左键时,Print窗口会返回对应值。
同时提供一个自定义的DynamicPrint(*)办法,你可以任意修改热键以调用该函数。
同时现在有多个Print任务时,若初始Print窗口未销毁,将会在同一窗口下显示结果。
修复了输出小数时异常结尾的问题。
5.优化List类的枚举办法,现在List类双参数枚举第一个参数返回正确的Index索引。
6.更新Set类型的枚举办法,与List类型相同。
7.新增类XRange,用于优化Range的枚举办法。
由于过去的Range办法适用领域较广,因此并未在Range基础上更改。
已完成所有使用Range枚举的办法替换为XRange。
同时修复部分时候Range返回值不符合预期的问题。(与ahk精度相关)
下载地址
Sinet v1.0.7.09
mono
复制