数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二、 ufunc 函数
ufunc
函数是对数组的每个元素进行运算的函数。numpy
很多内置的ufunc
函数使用C
语言实现的,计算速度非常快。基本上所有的
ufunc
函数可以指定一个out
参数来保存计算结果数组,并返回out
数组。同时如果未指定out
参数,则创建新的数组来保存计算结果。- 如果你指定了
out
参数,则要求out
数组与计算结果兼容。即:数组的尺寸要严格匹配,并且数组的dtype
要匹配。
- 如果你指定了
numpy
的某些ufunc
函数,如numpy.sin()
,支持计算单个数值。但是在单个数值的计算速度上,python
的math.sin()
要快得多。两个原因:numpy.sin()
为了同时支持数组和单个数值运算,其C
语言的内部实现要比math.sin()
复杂- 单个数值的计算上:
numpy.sin()
返回的是numpy.float64
类型,而math.sin()
返回的是python
的标准float
类型
1. 广播
当使用
ufunc
函数对两个数组进行计算时,ufunc
函数会对这两个数组的对应元素进行计算。这就要求这两个数组的形状相同。如果这两个数组的形状不同,就通过广播broadcasting
进行处理:- 首先让所有输入数组都向其中维度最高的数组看齐。看齐方式为:在
shape
属性的左侧插入数字1
- 然后输出数组的
shape
属性是输入数组的shape
属性的各轴上的最大值 - 如果输入数组的某个轴的长度为 1,或者与输出数组的各对应轴的长度相同,该数组能正确广播。否则计算出错
- 当输入数组的某个轴的长度为 1时,沿着此轴运算时都用此轴上的第一组值。
- 首先让所有输入数组都向其中维度最高的数组看齐。看齐方式为:在
可以通过
numpy.broadcast_arrays()
查看广播之后的数组你可以通过
ndarray.repeat()
方法来手动重复某个轴上的值.其用法为ndarray.repeat(repeats, axis=None)
,其中:repeats
为重复次数axis
指定被重复的轴,即沿着哪一轴重复。如果未指定,则将数组展平然后重复。返回的也是一个展平的数组
被重复的是该轴的每一组值。
numpy
提供了ogrid
对象,用于创建广播运算用的数组。ogrid
对象像多维数组一样,使用切片元组作为下标,返回的是一组可以用于广播计算的数组。其切片有两种形式:- 开始值:结束值:步长。它指定返回数组的开始值和结束值(不包括)。默认的开始值为 0;默认的步长为 1。与
np.arange
类似 - 开始值:结束值:长度 j。当第三个参数为虚数时,表示返回的数组的长度。与
np.linspace
类似。 - 有多少个下标,则结果就是多少维的,同时也返回相应数量的数组。每个返回的数组只有某一维度长度大于1,其他维度的长度全部为 1。假设下标元组长度为3,则结果元组中:第一个数组的
shape=(3,1,1)
,第二个数组的shape=(1,3,1)
,第三个数组的shape=(1,1,3)
。
- 开始值:结束值:步长。它指定返回数组的开始值和结束值(不包括)。默认的开始值为 0;默认的步长为 1。与
numpy
还提供了mgrid
对象,它类似于ogrid
对象。但是它返回的是广播之后的数组,而不是广播之前的数组: !mgrid
numpy
提供了meshgrid()
函数,其用法为:numpy.meshgrid(x1,x2,...xn)
。其中xi
是都是一维数组。返回一个元组(X1,X2,...Xn)
,是广播之后的数组。假设xi
的长度为li
,则返回元组的每个数组的形状都是(l1,l2,...ln)
。numpy.ix_()
函数可以将N
个一维数组转换成可广播的N
维数组。其用法为numpy.ix_(x1,x2,x3)
,返回一个元组。元组元素分别为对应的可广播的N
维数组。返回的是广播前的数组,而不是广播后的数组
每个转换前的一维数组,对应了一个转换后的
N
维数组
2. 四则运算
numpy
提供的四则运算如下,这些四则运算同时提供了函数形式以及表达式形式:加法:表达式形式
y=x1+x2
,使用ufunc
函数的形式:numpy.add(x1,x2[,out=y])
减法:表达式形式
y=x1-x2
,使用ufunc
函数的形式:numpy.subtract(x1,x2[,out=y])
乘法:表达式形式
y=x1*x2
,使用ufunc
函数的形式:numpy.multiply(x1,x2[,out=y])
真除法:表达式形式
y=x1/x2
,使用ufunc
函数的形式:numpy.true_divide(x1,x2[,out=y])
python3
中,numpy.divide(x1,x2[,out=y])
也是真除法
取整除法:表达式形式
y=x1//x2
,使用ufunc
函数的形式:numpy.floor_divide(x1,x2[,out=y])
取反:表达式形式
y=-x
,使用ufunc
函数的形式:numpy.negative(x[,out=y])
乘方:表达式形式
y=x1**x2
,使用ufunc
函数的形式:numpy.power(x1,x2[,out=y])
取余数:表达式形式
y=x1%x2
,使用ufunc
函数的形式:numpy.remainder(x1,x2[,out=y])
对于
np.add(a,b,a)
这种可以使用a+=b
来表示。这些四则运算都可以采用这种方式。当表达式很复杂时,如果同时数组很大,则会因为产生大量的中间结果而降低程序的运算速度。如:
x=a*b+c
等价于:xxxxxxxxxx
t=a*b x=t+c del t我们可以使用:
xxxxxxxxxx
x=a*b x+=c从而减少了一次内存分配。
3. 比较运算
numpy
提供的比较运算如下,这些比较运算同时提供了函数形式以及表达式形式,并且产生的结果是布尔类型的数组:- 等于: 表达式形式
y=x1==x2
,使用ufunc
函数的形式:numpy.equal(x1,x2[,out=y])
- 不等于: 表达式形式
y=x1!=x2
,使用ufunc
函数的形式:numpy.not_equal(x1,x2[,out=y])
- 小于: 表达式形式
y=x1<x2
,使用ufunc
函数的形式:numpy.less(x1,x2[,out=y])
- 小于等于: 表达式形式
y=x1<=x2
,使用ufunc
函数的形式:numpy.less_equal(x1,x2[,out=y])
- 大于: 表达式形式
y=x1>x2
,使用ufunc
函数的形式:numpy.greater(x1,x2[,out=y])
- 大于等于: 表达式形式
y=x1>=x2
,使用ufunc
函数的形式:numpy.greater_equal(x1,x2[,out=y])
- 等于: 表达式形式
4. 逻辑运算
由于
python
中的布尔运算使用and/or/not
关键字,因此它们无法被重载。numpy
提供的数组布尔运算只能通过ufunc
函数进行,这些函数以logical_
开头。进行逻辑运算时,对于数值零视作False
;对数值非零视作True
。运算结果也是一个布尔类型的数组:- 与:
ufunc
函数的形式:numpy.logical_and(x1,x2[,out=y])
- 或:
ufunc
函数的形式:numpy.logical_or(x1,x2[,out=y])
- 否定:
ufunc
函数的形式:numpy.logical_not(x[,out=y])
- 异或:
ufunc
函数的形式:numpy.logical_xor(x1,x2[,out=y])
- 与:
对于数组
x
,numpy
定义了下面的操作:numpy.any(x)
:只要数组中有一个元素值为True
(如果数值类型,则为非零),则结果就返回True
;否则返回False
numpy.all(x)
:只有数组中所有元素都为True
(如果数值类型,则为非零),则结果才返回True
;否则返回False
5. 位运算
numpy
提供的位运算如下,这些位运算同时提供了函数形式(这些函数以bitwise_
开头)以及表达式形式。其中输入数组必须是整数或者布尔类型(如果是浮点数则报错):- 按位与:表达式形式
y=x1&x2
,使用ufunc
函数的形式:numpy.bitwise_and(x1,x2[,out=y])
- 按位或:表达式形式
y=x1|x2
,使用ufunc
函数的形式:numpy.bitwise_or(x1,x2[,out=y])
- 按位取反:表达式形式
y=~x
,使用ufunc
函数的形式:numpy.bitwise_not(x[,out=y])
- 按位异或:表达式形式
y=x1^x2
,使用ufunc
函数的形式:numpy.bitwise_xor(x1,x2[,out=y])
- 按位与:表达式形式
有几点注意:
- 位运算符的优先级要比比较运算符高
- 整数数组的位运算和
C
语言的位运算符相同,注意正负号
6. 自定义 ufunc 函数
可以通过
frompyfunc()
将计算单个元素的函数转换成ufunc
函数。调用格式为:my_ufunc=frompyfunc(func,nin,nout)
。其中:func
:计算单个元素的函数nin
:func
的输入参数的个数nout
:func
返回值的个数
调用时,使用
my_ufunc(...)
即可。也可以通过
vectorize()
函数来实现frompyfunc()
的功能。其原型为:np.vectorize(func, otypes='', doc=None, excluded=None)
。其中:func
:计算单个元素的函数otypes
:可以是一个表示结果数组元素类型的字符串,也可以是一个类型列表。如果使用类型列表,可以描述多个返回数组的元素类型doc
:函数的描述字符串。若未给定,则使用func.__doc__
excluded
:指定func
中哪些参数未被向量化。你可以指定一个字符串和整数的集合,其中字符串代表关键字参数,整数代表位置参数。
7. ufunc 对象的方法
ufunc
函数对象本身还有一些方法。- 这些方法只对于两个输入、一个输出的
ufunc
函数函数有效。对于其他的ufunc
函数对象调用这些方法时,会抛出ValueError
异常。
- 这些方法只对于两个输入、一个输出的
ufunc.reduce
方法:类似于Python
的reduce
函数,它沿着axis
参数指定的轴,对数组进行操作。- 相当于将
<op>
运算符插入到沿着axis
轴的所有元素之间:<op>.reduce(array,axis=0,dtype=None)
- 经过一次
reduce
,结果数组的维度降低一维
- 相当于将
ufunc.accumulate
方法:它类似于reduce()
的计算过程,但是它会保存所有的中间计算结果,从而使得返回数组的形状和输入数组的形状相同:ufunc.outer
方法:相当于将<op>
运算符对输入数组A
和输入数组B
的每一对元素对(a,b)
起作用:<op>.reduce(A,B)
。结果数组维度为A.dim+B.dim
。设A
的shape=(4,5)
,B
的shape
为(4,)
,则结果数组的shape=(4,5,4)
- 一维数组和一维数组的
outer
操作为二维数组 - 多维数组的
outer
拆分成各自的一维操作
- 一维数组和一维数组的
8. 数学函数
下面是一元的数学函数:
abs/fabs
:计算整数、浮点数或者复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt
:计算平方根,相当于a**0.5
square
:计算平方,相当于a**2
exp
:计算指数 $ MathJax-Element-50 $log/log10/log2/log1p
:分别为 $ MathJax-Element-51 $sign
:计算 $ MathJax-Element-52 $ceil
:计算各元素的ceiling
值:大于等于该值的最小整数floor
:计算个元素的floor
值:小于等于该值的最大整数rint
:将各元素四舍五入到最接近的整数,保留dtype
modf
:将数组的小数和整数部分以两个独立数组的形式返回isnan
:返回一个布尔数组,该数组指示那些是NaN
isfinite/isinf
:返回一个布尔数组,该数组指示哪些是有限的/无限数cos/cosh/sin/sinh/tan/tanh
:普通和双曲型三角函数arccos/arcsosh/arcsin/arcsinh/arctan/arctanh
:反三角函数
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论