矩阵乘法

动态规划 矩阵乘法

匿名 (未验证) 提交于 2019-12-03 00:21:02
http://lx.lanqiao.cn/problem.page?gpid=T417 dp[i][j]的含义:从第i个矩阵到第j个矩阵的最优解 动态规划状态方程: 这个题和合并石子很相似,这个题应该是默认了每一个矩阵只能和左右两个矩阵相乘,每次矩阵乘法的最后都是两个矩阵的相乘,要求从矩阵i到矩阵j的相乘的最小值 ,就要比较(j-i)次得到最小值。 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; const ll maxn = 1001; const ll inf = INT_MAX; ll dp[maxn][maxn]; ll a[maxn]; ll n; int main(){ cin>>n; for(ll i = 0;i <=n;i++) cin>>a[i]; //默认为第i个矩阵的大小为 a[i-1]*a[i], for(ll i = 1 ; i <= n;i++) for(ll j = 1;j <= n;j++){ if(i == j) dp[i][j] = 0; // i == j 就是只有一个矩阵,dp[i][j]就是0 else dp[i][j] = inf; //初始化为最大值 } for(ll j = 2;j

如何设置batchsize

匿名 (未验证) 提交于 2019-12-03 00:13:02
batchsize过小:每次计算的梯度不稳定,引起训练的震荡比较大,很难收敛。 batchsize过大: (1)提高了内存利用率,大矩阵乘法并行计算效率提高。 (2)计算的梯度方向比较准,引起的训练的震荡比较小。 (3)跑完一次epoch所需要的迭代次数变小,相同数据量的数据处理速度加快。 缺点:容易内容溢出,想要达到相同精度,epoch会越来越大,容易陷入局部最优,泛化性能差。 batchsize设置:通常10到100,一般设置为2的n次方。 原因:计算机的gpu和cpu的memory都是2进制方式存储的,设置2的n次方可以加快计算速度。 来源:博客园 作者: 乐呵的太阳 链接:https://www.cnblogs.com/happytaiyang/p/11617551.html

矩阵快速幂+概率DP poj 3744

匿名 (未验证) 提交于 2019-12-03 00:11:01
题意:在一条不满地雷的路上,你现在的起点在1处。在N个点处布有地雷,1<=N<=10。地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步。问顺利通过这条路的概率。就是不要走到有地雷的地方。 设dp[i]表示到达i点的概率,则 初始值 dp[1]=1. 很容易想到转移方程: dp[i]=p*dp[i-1]+(1-p)*dp[i-2]; 但是由于坐标的范围很大,直接这样求是不行的,而且当中的某些点还存在地雷。 N个有地雷的点的坐标为 x[1],x[2],x[3]```````x[N]. 我们把道路分成N段: 1~x[1]; x[1]+1~x[2]; x[2]+1~x[3]; ` ` ` x[N-1]+1~x[N]. 这样每一段只有一个地雷。我们只要求得通过每一段的概率。乘法原理相乘就是答案。 对于每一段,通过该段的概率等于1-踩到该段终点的地雷的概率。 就比如第一段 1~x[1]. 通过该段其实就相当于是到达x[1]+1点。那么p[x[1]+1]=1-p[x[1]]. 但是这个前提是p[1]=1,即起点的概率等于1.对于后面的段我们也是一样的假设,这样就乘起来就是答案了。 对于每一段的概率的求法可以通过矩阵乘法快速求出来。 1 /* 2 POJ 3744 3 4 C++ 0ms 184K 5 */ 6 #include <stdio.h>

数学基础-day3

匿名 (未验证) 提交于 2019-12-03 00:09:02
1 代数余子式 在一个n阶行列式A中,把(i,j)元素a ij 所在的第i行和第j列划去后,留下的n-1阶方阵的行列式叫做元素a ij 的余子式,记作M ij 。 代数余子式A ij =(-1) i+j M ij 2 伴随矩阵 对于n*n方阵,其代数余子式组成的方阵A * 称为A的伴随矩阵。 A*A * =|A|*I 3 范德蒙行列式 4 矩阵乘法 5 矩阵和向量的乘法 A为m*n的矩阵,x为n*1的列向量,则Ax为m*1的列向量。 矩阵和向量的乘法实际给出了从n维空间的点到m维空间点的线性变换,特殊地,若m=n,则Ax完成了n维空间内的线性变换。 6 矩阵的秩 在m*n矩阵A中,任取k行k列,不改变这k2个元素在A中的次序,得到k阶矩阵,称为矩阵A的k阶子式。 设在A中有一个不等于0的r阶子式D,且所有r+1阶子式全等于0,那么D称为矩阵A的最高阶非零子式,r称为矩阵A的秩,记作R(A)=r n*n的可逆矩阵,秩为n,可逆矩阵又称满秩矩阵。 秩与线性方程组的解的关系,对于n元线性方程组Ax=b: 无解的充要条件:R(A)<R(A,b) 唯一解的充要条件:R(A)=R(A,b)=n 无限多解的充要条件:R(A)=R(A,b)<n 7 向量组等价 向量b能由向量组A:a1,a2,…,am线性表示的充要条件是矩阵A=(a1,a2,…,am)的秩等于矩阵B=(a1,a2,…,am,b

[转] 理解矩阵

孤人 提交于 2019-12-03 00:08:41
from: https://www.cnblogs.com/marsggbo/p/10144060.html 线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着莫名其妙。比如说,在全国一般工科院系教学中应用最广泛的同济线性代数教材(现在到了第四版),一上来就介绍逆序数这个“前无古人,后无来者”的古怪概念,然后用逆序数给出行列式的一个极不直观的定义,接着是一些简直犯傻的行列式性质和习题——把这行乘一个系数加到另一行上,再把那一列减过来,折腾得那叫一个热闹,可就是压根看不出这个东西有嘛用。大多数像我一样资质平庸的学生到这里就有点犯晕:连这是个什么东西都模模糊糊的,就开始钻火圈表演了,这未免太“无厘头”了吧!于是开始有人逃课,更多的人开始抄作业。这下就中招了,因为其后的发展可以用一句峰回路转来形容,紧跟着这个无厘头的行列式的,是一个同样无厘头但是伟大的无以复加的家伙的出场——矩阵来了!多年之后,我才明白,当老师犯傻似地用中括号把一堆傻了吧叽的数括起来,并且不紧不慢地说:“这个东西叫做矩阵”的时候,我的数学生涯掀开了何等悲壮辛酸、惨绝人寰的一幕!自那以后,在几乎所有跟“学问”二字稍微沾点边的东西里,矩阵这个家伙从不缺席。对于我这个没能一次搞定线性代数的笨蛋来说,矩阵老大的不请自来每每搞得我灰头土脸,头破血流。长期以来,我在阅读中一见矩阵,就如同阿Q见到了假洋鬼子

矩阵求导(二)

匿名 (未验证) 提交于 2019-12-03 00:08:02
本文承接上篇 https:// zhuanlan.zhihu.com/p/24 709748 ,来讲矩阵对矩阵的求导术。使用小写字母x表示标量,粗体小写字母 表示列向量,大写字母X表示矩阵。矩阵对矩阵的求导采用了向量化的思路,常应用于二阶方法求解优化问题。 首先来琢磨一下定义。矩阵对矩阵的导数,需要什么样的定义?第一,矩阵F(p×q)对矩阵X(m×n)的导数应包含所有mnpq个偏导数 ,从而不损失信息;第二,导数与微分有简明的联系,因为在计算导数和应用中需要这个联系;第三,导数有简明的从整体出发的算法。我们先定义向量 (p×1)对向量 (m×1)的导数 (m×p),有 ;再定义矩阵的(按列优先)向量化 (mn×1),并定义矩阵F对矩阵X的导数 (mn×pq)。导数与微分有联系 。几点说明如下: 按此定义,标量f对矩阵X(m×n)的导数 是mn×1向量,与上篇的定义不兼容,不过二者容易相互转换。为避免混淆,用记号 表示上篇定义的m×n矩阵,则有 。虽然本篇的技术可以用于标量对矩阵求导这种特殊情况,但使用上篇中的技术更方便。读者可以通过上篇中的算例试验两种方法的等价转换。 标量对矩阵的二阶导数,又称Hessian矩阵,定义为 (mn×mn),是对称矩阵。对向量 或矩阵 求导都可以得到Hessian矩阵,但从矩阵 出发更方便。 ,求导时矩阵被向量化,弊端是这在一定程度破坏了矩阵的结构

BLAS快速入门

匿名 (未验证) 提交于 2019-12-03 00:08:02
一.简介   BLAS【Basic Linear Algebra Subprograms,基础线性代数程序集】是一个应用程序接口【API】标准,用于规范发布基础基础线性代数操作的数值库【常用于向量或矩阵计算】。该程序集最初发布于1979年,并用于创建更大的数值程序包【例如:LAPACK】。在高性能计算领域,BLAS被广泛使用。 二.特点   1.BLAS按照功能被分为三个级别:     Level1:向量-向量计算,比如:点积【dot】,向量加法和乘法【axpy】,绝对值的和【asum】等。     Level2:向量-矩阵计算,比如:矩阵向量乘法【gemv】。     Level3:矩阵-矩阵计算,比如:矩阵乘法【gemm】。   2.每一种函数操作都区分不同的数据类型【单精度、双精度、复数】,比如:矩阵乘法分为sgemm【单精度一般矩阵乘法】、dsymm【双精度对称矩阵乘法】、zhemm【双精度复数埃米特矩阵乘法】。之所以要分这么多种,主要是针对每种不同类型的矩阵都要分别设计专门的算法,使得计算性能最优。 三.基本运算函数    来源:博客园 作者: 云山之巅 链接:https://www.cnblogs.com/yszd/p/11540497.html

DirectX:Matrix

匿名 (未验证) 提交于 2019-12-03 00:00:02
Tag DirectX下的博客主要用于记录DirectX的学习过程,主要参考《DirectX 12 3D 游戏实战开发》。 Matrix in DirectX 3D数学最重要的就是描述几何体的变换,其中肯定会涉及到矩阵。本篇的主要内容即是DirectXMath库中与矩阵相关的部分。 首先温习矩阵运算的几个特点。 矩阵加法满足交换律和结合律 矩阵A、B相乘有意义,当且仅当A的列数与B的行数相同 矩阵乘法一般不满足交换律 标量乘法对矩阵加法、矩阵乘法对标量加法满足分配律 向量与矩阵相乘实际上是一种线性组合 单位矩阵即主对角线均为一、其余为零的方阵 方阵可逆当且仅当方阵的行列式不等于零 一个方阵关于i行j列的余子式即该方阵去掉第i行和第j列剩下的部分构成的方阵,代数余子式即在余子式的基础上乘上-1的i+j次方 把方阵关于i行j列的余子式都放到对应的行和列上构成的矩阵称为方阵的代数余子式矩阵,该方阵的伴随矩阵即为代数余子式矩阵的转置 方阵的逆矩阵为该方阵的伴随矩阵除以其行列式 在3D图形学中,通常最多涉及到4维的内容,对应4维向量和4*4的矩阵。DirectXMath库提供了 XMMATRIX 类型来表示矩阵。 #if (defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM)) && defined(_XM_NO_INTRINSICS)

matlab基础知识

匿名 (未验证) 提交于 2019-12-02 23:55:01
1.ceil(x):向上取整 floor(x):向下取整 2.round(x,y):保留小数点后y位 3.sign(x):判断正负,若为正,则为1;若为负,则为-1;若为0,则为0 4.conj(x):取x的共轭 abs(x):取模 real(x):取x的实部 imag(x):取x的虚部 angle(x):求复数矩阵相位角的弧度值 5.flipu(x):矩阵的第一行与最后一行进行互换 flipdim(x,dim):dim为1,表示每一列进行逆序排列;dim为2,表示每一行进行逆序排列 fliplr(x):实现矩阵沿垂直轴左右翻转 6.mean(x):mean函数是一个求数组平均值的函数 mean(x,dim):dim为1,求每一列的平均值;dim为2,求每一行的平均值 7.length(x):length(x)为数列的长度,即它里面有多少个元素.如果x0是矩阵的话,比方说M行N列,那么length返回M和N这两个数的最大值 8.[b0,ind]=sort(x):按列将矩阵排序,然后找出他们的位置 [b0,ind]=sort(x,2):按行将矩阵排序,然后找出他们的位置 9.dot(a,b):向量的点乘,ps:只能用于向量,不可以用于矩阵 cross(a,b):向量的×乘 10.[m,n]=size(a):求矩阵的行列,行为m,列为n 11.可以用;或者回车换行输入命令 12

numpy之矩阵

匿名 (未验证) 提交于 2019-12-02 23:47:01
---恢复内容开始--- 一、矩阵的创建(三种方法) ''' 矩阵:其是numpy.matrix类型对象,该类继自ndarray,所以几乎所有针对ndarry数组的操作,对矩阵对象同样有效, 作为子类,矩阵又集合了自身的特点做了必要的扩充,如:矩阵的乘法运算、求逆等 ''' import numpy as np # 创建矩阵 ary = np.arange(1, 10).reshape(3, 3) print(ary, type(ary)) # 方法1 m = np.matrix(ary, copy=True) print(m, type(m)) ary[0, 0] = 999 print(m, type(m)) print('-------------------') # 方法2 m = np.mat('1 2 3;4 5 6;7 8 9') print(m) # 方法3:等价于np.matrix(ary,copy=False)--->矩阵数据与数组数据共享 m = np.mat(ary) print(m) 输出结果: [[1 2 3] [4 5 6] [7 8 9]] <class 'numpy.ndarray'> [[1 2 3] [4 5 6] [7 8 9]] <class 'numpy.matrix'> [[1 2 3] [4 5 6] [7 8 9]] <class