一、背景 平时业务开发可能有这样的一个场景:一个集合有M个元素,需要每N个元素一起处理。 虽然这个功能非常简单,直接用for循环或者while可以写,其实可以封装成工具类,方便后续复用。...二、源码 单元测试 三、总结 遇到一些可以复用的场景可以考虑封装成工具类。 测试时可以考虑用EasyRandom来构造测试对象,省时省力。
题目:从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的 Fisher-Yates洗牌算法是由 Ronald A.Fisher和Frank Yates于1938年发明的,后来被Knuth...等概率: 洗牌算法有些人也称等概率洗牌算法,其实发牌的过程和我们抽签一样的,大学概率论讲过抽签是等概率的,同样洗牌算法选中每个元素是等概率的。...用洗牌算法思路从1、2、3、4、5这5个数中,随机取一个数 4被抽中的概率是1/5 5被抽中的概率是1/4 * 4/5 = 1/5 2被抽中的概率是1/3 * 3/4 *..., Knuth 和 Durstenfeld 在Fisher 等人的基础上对算法进行了改进,在原始数组上对数字进行交互,省去了额外O(n)的空间。...该算法的基本思想和 Fisher 类似,每次从未处理的数据中随机取出一个数字,然后把该数字放在数组的尾部,即数组尾部存放的是已经处理过的数字。
Top N的两个函数,其他函数在用到的时候查看文档就好了。...1)、heapq.nlargest(n, iterable[, key]) 从迭代器对象iterable中返回前n个最大的元素列表,其中关键字参数key用于匹配是字典对象的iterable,用于更复杂的数据结构中...2)、heapq.nsmallest(n, iterable[, key]) 从迭代器对象iterable中返回前n个最小的元素列表,其中关键字参数key用于匹配是字典对象的iterable,用于更复杂的数据结构中...关于第三个参数的应用,我们来看一个例子就明白了。...3)如果N很大,接近集合元素,则为了提高效率,采用sort+切片的方式会更好,如: 求最大的N个元素:sorted(iterable, key=key, reverse=True)[:N] 求最小的N个元素
CSR向量是对CSR标量的改进,在CSR标量中,将warp(32个线程)分配给一行来执行SpMV。但是,每行非零元素数量的差异会导致空闲线程,从而导致负载不平衡,从而导致性能较差。...Nnz是矩阵中非零元素的数量,与计算输出向量所需的运算(乘法和加法)的数量成正比。 Dis表示每一行中每对连续非零元素之间的平均距离。...因为它为矩阵的每一行使用一个线程向量(在我们的实验中是32个线程)。 由于ELL格式中的行大小(在零填充之后)等于每行非零元素的最大数量(max)。...矩阵中非零元素的数量(nnz),与计算输出向量所需的运算(乘法和加法)的数量成正比。 每一行中每对连续非零元素之间的平均距离(dis),描述了对乘向量的随机访问。...CSR格式下的SpMV核(向量核)的性能对矩阵行大小很敏感,因为它为矩阵的每一行使用一个线程向量(在我们的实验中是32个线程)。
点乘、点除等) 4.Matlab平台提供了大量的常用的运算函数 5.生成对角矩阵的基本用法 6、生成三对角线上元素相同的矩阵 7.m行n列的元素都为0的矩阵 ---- ---- 1.矩阵下标引用 表达式...(Matlab程序) 函数功能 A(1) 将二维矩阵A重组为一维数组,返回数组中第一个元素 A(: , j) 返回二维矩阵A中第 j 列 列向量 A( i , :) 返回二维矩阵A中第 i 行 行向量...) 返回二维矩阵A中第 i 行到第 k 行 行向量 和第 j 列到第 m 列 列向量的交集组成的子矩阵 A(:) 将二维矩阵A中得每列合并成一个列向量 A( j : k) 返回一个行向量,其元素为A(:...)中的第 j 个元素到第 k 个元素 A([ j1 j2…]) 返回一个行向量,其元素为A(:)中的第 j1,j2…个元素 A(: , [ j1 j2 …]) 返回矩阵A的第 j1 列、第 j2 列等的列向量...min(a,b) 返回a, b中较小的数值 max(a,b) 返回a, b中较大的数值 mean(x) 求x的列平均数(列平均) median(x) 求x的列中位数(列中位数) sum(x) x中各个列之间的元素求和
(n1,n2):n1×n2的矩阵,矩阵内元素全部为1 diag([x1 x2 x3]):主对角线为x1,x2,x3的矩阵 linspace(a,b,n):生成一个1×n的矩阵,第一个元素值为a,最后一个元素值为...b,共有n个数据 rand(m,n):生成一个m×n阶的矩阵,矩阵内的值是0-1之间的随机值 3.5 常用矩阵函数 max(A) = 7 5 9(max函数的作用是求出矩阵每一列中的最大值) max(max...(A)) = 9(max外面嵌套一个max的作用是求出矩阵所有元素中的最大值) min(A)= 0 0 3(min函数的作用是求出矩阵每一列中的最小值) min(min(A)) = 0(min外面嵌套一个...min的作用是求出矩阵所有元素中的最小值) sum(A) = 8 7 18(sun函数的作用是计算矩阵每一列的和) sum(sum(A)) = 33(sum外面嵌套一个sum的作用是求出矩阵内所有元素的和...) mean(A)(mean函数的作用是计算矩阵每一列的平均数) mean(mean(A))(mean外面嵌套一个mean的作用是求出矩阵内所有元素的平均数) sort(A) = (sort函数的作用是将矩阵每一列元素从小到大进行排序
而数组运算是Matlab软件定义的规则,其目的是为了使数据管理方便,操作简单,命令形式自然,执行计算有效。 二者联系主要体现在:在Matlab中,矩阵是以数组的形式存在的。...1、矩阵下表引用 表达式(Matlab程序) 函数功能 1 A(1) 将二维矩阵A重组为一维数组,返回数组中第一个元素 2 A(: , j) 返回二维矩阵A中第 j 列 列向量 3 A( i , :)...6 A( i : k , j : m) 返回二维矩阵A中第 i 行到第 k 行 行向量 和第 j 列到第 m 列 列向量的交集组成的子矩阵 7 A(:) 将二维矩阵A中得每列合并成一个列向量 8 A(...j : k) 返回一个行向量,其元素为A(:)中的第 j 个元素到第 k 个元素 9 A([ j1 j2…]) 返回一个行向量,其元素为A(:)中的第 j1,j2…个元素 10 A(: , [ j1...13 max(a,b) 返回a, b中较大的数值 14 mean(x) 求x的列平均数(列平均) 15 median(x) 求x的列中位数(列中位数) 16 sum(x) x中各个列之间的元素求和 17
3 矩阵的元素运算 注意,是矩阵中的各个元素之间的运算,不是两个矩阵的运算。...(2)比较运算 用比较运算符比较两个矩阵中的元素,如果比较成立,则返回1,否则返回0,比如: 例子 proc iml; a={1 2,3 4}; b={0 2,1 1}; c1=a>b; c2...(3)取值运算 :取出矩阵中对应元素较大的; >:< 求平方和: ## 也可以进行组合操作,比如,我们想对a矩阵的每列求出最大值,然后讲着三个最大值求平均: 例子 proc iml; a={1 2 3, 4 5...注意a[ , : ]的运算顺序一定是从左向右的:先计算每列的最大值,为{7,8,9},然后计算平均值,为8。
我们可以看到,对输入序列中的所有标记执行这一过程会产生一个大小为 T x C 的矩阵。T 代表时间,也就是说,你可以把序列中稍后的标记看作是时间上稍后的标记。...这是对矩阵每列的值分别进行归一化的操作。 归一化是深度神经网络训练中的一个重要步骤,它有助于提高模型在训练过程中的稳定性。 我们可以分别看待每一列,所以现在先关注第 4 列(t = 3)。...第一步是为归一化输入嵌入矩阵的每 T 列生成三个向量。这些向量就是 Q、K 和 V 向量: Q:查询向量 K:键向量 V:值向量 要生成这些向量中的一个,我们要执行矩阵-向量乘法,并加上偏置。...我们会经常看到的点乘操作非常简单:我们将第一个向量中的每个元素与第二个向量中的相应元素配对,将配对的元素相乘,然后将结果相加。...2.一个 GELU 激活函数(按元素计算) 3.带偏置的线性变换,返回长度为 C 的矢量 让我们追踪其中一个向量: 我们首先执行带偏置的矩阵-向量乘法,将向量扩展为长度为 4 * C 的矩阵。
(2)[Y,U]=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值元素的行号。 ( 3 ) max(A,0,dim): dim取1或2。...求平均值和中值 平均值: 指算术平均值,即每项数据之和除以项数。 中值: 指在数据序列中其值的大小恰好处在中间的元素。...如果数据个数为奇数,则取值为大小位于中间的元素;如果数据个数为偶数,则取中间两个元素的平均值。...多项式的四则运算 多项式的加减运算 多项式的加减运算非常简单,即相应向量相加减。...若x为标量,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值。 polyvalm(p,x) 其调用格式与polyval相同,但含义不同。
+ - / 与 * 的运算规则相同。 数学上定义的矩阵乘法 np.dot(a, b)。如果形状不匹配会报错;但是允许允许a和b都是向量,返回两个向量的内积。...(PS:总之就是,向量很特殊,在运算中可以自由转置而不会出错,运算的返回值如果维度为1,也一律用行向量[]表示) 读取数组元素:如a[0],a[0,0] 数组变形:如b=a.reshape(2,3,4...,总共返回10个数 求余:np.mod(a,n)相当于a%n,np.fmod(a,n)仍为求余且余数的正负由a决定 计算平均值:np.mean(a) 计算最大值:amax(a, axis=None...判断两数组是否相等: np.array_equal(a,b) 判断数组元素是否为实数: np.isreal(a) 去除数组中首尾为0的元素:np.trim_zeros(a) 对浮点数取整,但不改变浮点数类型...:np.rint(a) 二、数组属性 1.获取数组每一维度的大小:a.shape 2.获取数组维度:a.ndim 3.元素个数:a.size 4.数组元素在内存中的字节数:a.itemsize
可以通过以下两种方式中的任意一种访问向量中的元素: 使用数值向量和逻辑向量。 数值索引 通过在括号内输入零个或多个元素的索引值,可以单个或分组访问向量中的元素。...向量运算 算术运算 向量中的加减法运算 可以看见是对向量中每个元素进行加法运算,减法也一样 向量中的乘法、除法....看一个简单的例子: Maltab中的数组 向量是聚集相似数据集的最简单的方法。而数组是向量的拓展,使其包括多个维度的数组,其中二维数组是每行具有相同的列,并且每列具有相同的行。...∗:对应元素相乘: 例子: 数组的逻辑运算 如果两个数组具有相同的大小,或者其中一个数组是标量(及长度为1的向量),逻辑运算可以同时执行在这两个数组的各个元素上。...,每列的最大值和每列的最小值 连接数组 看一个简单的例子 切片数组 对一个数组进行切片:A(对行索引,对列索引) 例子: 重塑数组 有些时候我们希望将某一维度的数组变形为另一种维度的需求
如下所示,如果我们将向量 v 左乘矩阵 A,我们就会得到新的向量 b,也即可以表述说矩阵 A 对输入向量 v 执行了一次线性变换,且线性变换结果为 b。...线性变换中的线性正是表明了这种沿直线轴进行变换的特性,一般来说几阶方阵就有几个特征向量,如 3*3 矩阵有 3 个特征向量,n 阶方阵有 n 个特征向量,每一个特征向量表征一个维度上的线性变换方向。...因为特征向量提取出了矩阵变换的主要信息,因此它在矩阵分解中十分重要,即沿着特征向量对角化矩阵。因为这些特征向量表征着矩阵的重要特性,所以它们可以执行与深度神经网络中自编码器相类似的任务。...样本标准差即样本方差的平方根。即每一样本点到样本均值之间的平均距离。n 个样本的方差却只除以 n-1 是因为样本只是真实分布的估计量,样本方差也只是真实方差的估计量。...所以我们希望将最相关的特征投影到一个主成分上而达到降维的效果,投影的标准是保留最大方差。而在实际操作中,我们希望计算特征之间的协方差矩阵,并通过对协方差矩阵的特征分解而得出特征向量和特征值。
图片同理,对于name字段,其向量位图为:图片可以看出,如果对于数据表的一个字段,如果记录数为n且字段的取值基数为m,那么会得到一个m*n的位图。2.1.2 位图向量的应用有了位图向量,该如何使用呢?...两个向量进行交集运算:图片最后统计结果为1。 关于Bitmap的思想,笔者认为最巧妙的一点就是通过位运算实现了集合运算。如下图所示:图片在不同的业务场景中,这里的集合可以赋予不同的业务含义。...迭代执行:对于要进行基数统计的集合,用一个哈希函数处理集合中的每一个元素。通过哈希函数处理后,元素就可以放置到一个房间中。收尾:统计m个房间中空房间的数量U。...结论:集合中不重复元素的个数估计值可以通过如下公式计算:n=-m*log(U/m)。这样就把一个统计问题转换成了一个数学问题。公式非常简洁,看到这里大脑中一定会出现许多的问题: 这个公式是怎么得到的?...; }while (r<1); return cnt; }可以看出,每执行一轮实验就会得到一个数字,代表这轮实验抛掷硬币的次数。
归一化是深度神经网络训练中的一个重要步骤,它有助于提高模型在训练过程中的稳定性。 我们可以分别看待每一列,所以现在先关注第4列(t=3)。 我们的目标是使该列的平均值等于0,标准偏差等于1。...第一步是从归一化输入嵌入矩阵的C列中为每一列生成三个向量。这些向量分别是Q、K和V向量: Q:查询向量 K:键向量 V:值向量 要生成这些向量中的一个,我们要执行矩阵-向量乘法,并加上偏置。...我们会经常看到的点乘运算非常简单:我们将第一个向量中的每个元素与第二个向量中的相应元素配对,将这对元素相乘,然后将结果相加。...一个GELU激活函数(按元素计算) 3. 进行线性变换并添加偏置,返回长度为C的向量 让我们追踪其中一个向量: 我们首先进行带偏置的矩阵-向量乘法运算,将向量扩展为长度为4*C 的矩阵。...(请注意,输出矩阵在这里进行了转置,这纯粹是为了更加形象化) 接下来,我们对向量的每个元素应用GELU激活函数。 这是任何神经网络的关键部分,我们要在模型中引入一些非线性。
其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度。 那么Numpy到底有什么功能呢?...np a=np.arange(10) print(a) 执行结果如图 在上面的程序中只涉及 numpy 模块中的一个 arange 函数,该函数可以传入一个整数类型的参数 n,函数返回值看着像一个列表...每一个列表元素是一维的 ndarray 类型数组,作为二维数组的行。...另外,通过 ndarray 类的 shape 属性可以获得数组每一维的元素个数(元组形式),也可以通过 shape[n]形式获得每一维的元素个数,其中 n 是维度,从 0 开始。...:',b.shape) 执行结果如图 1.2.3 随机数创建 numpy 中的 random 模块包含了很多方法可以用来产生随机数,对 random 中的一些常用方法如表所示: ---- 【
峰值性能:理想情况下计算机系统可以获得的最高理论性能值 持续性能:也称实际性能,其表示有算术性能平均值,调和性能平均值,几何性能平均值 算术性能平均值 设算术性能平均值Am是n道程序运算速度或运算时间的算术平均值...—比较准确 几何性能平均值 几何平均数是n个变量值连乘积的n次方根 几何平均值无法给出系统性能的真实期望....,由于没有专门的向量数据表示,因此在计算一个向量(相当于一维数组的计算)时,每取用一个数据元素,都要用到计算该元素的地址。...而在向量机中,由于有了向量数据表示,就可以把一个向量用一个位串来表示出来。向量指令就是能够用一条指令对向量的全部元素进行运算的指令。...引入向量、数组数据表示优点 不只是能加快形成元素地址; 便于实现把向量各元素成块预取到中央处理器; 能对阵列中的每个元素又是一个子阵列的相关交叉型阵列进行处理; 对稀疏矩阵能实现压缩存储、还原、运算等多种功能操作
Apply 这是对一个Matrix或者Array进行某个维度的运算。...其格式是: Apply(数据,维度Index,运算函数,函数的参数) 对于Matrix来说,其维度值为2,第二个参数维度Index中,1表示按行运算,2表示按列运算。...的结果,里面包含3个项,每个项是函数执行的结果。...,他们具有相同的长度: a<-1:5 b<-2:6 c<-5:1 现在我们要求a,b,c中的对应各位数进行m3函数的运算,也就是把a,b,c的第一个数做运算,然后把a,b,c的第二个数做运算,然后第三个数...Tapply 前面介绍的几个apply函数都是对整体数据进行处理,而tapply是对向量中的数据进行分组处理。
领取专属 10元无门槛券
手把手带您无忧上云