矩阵转置

【CUDA】CUDA9.0+VS2017+win10详细配置

匿名 (未验证) 提交于 2019-12-03 00:22:01
转载自:https://blog.csdn.net/u013165921/article/details/77891913 CUDA9.0下载地址:链接:https://pan.baidu.com/s/1acwBDuGHac-C-qDhyeid7w 密码:4x16 CUDA9.0是目前最新的Cuda版本,VS2017也是目前最新的Visual Studio版本,当前(2017/09)网上很少有CUDA9.0+VS2017的配置。 CUDA9.0安装: https://developer.nvidia.com/cuda-release-candidate-download ,由于还是测试版,所以需要NVIDIA开发人员计划的成员资格。需登录以获取访问权限并完成此免费加入程序的简短申请(网盘或者贴吧是很好的资源…)。 设置环境变量: CUDA_SDK_PATH = C: \ProgramData\NVIDIA Corporation\CUDA Samples\v9. 0 CUD A_LIB _PATH = %CUDA_PATH% \lib\x64 CUD A_BIN _PATH = %CUDA_PATH% \bin CUD A_SDK _BIN_PATH = %CUDA_SDK_PATH% \bin\win64 CUD A_SDK _LIB_PATH = %CUDA_SDK_PATH%

mul函数

匿名 (未验证) 提交于 2019-12-03 00:22:01
基本信息 mul函数 Unity3d 中,若是OpenGL,用的应该是GLSL,mul方法是(M,V)。 矩阵 内置的矩阵(float4x4): 名称 说明 UNITY_MATRIX_MVP 当前模型视图投影矩阵 UNITY_MATRIX_MV 当前模型视图矩阵 UNITY_MATRIX_V 当前视图矩阵 UNITY_MATRIX_P 当前的投影矩阵 UNITY_MATRIX_VP 当前视图投影矩阵 UNITY_MATRIX_T_MV 模型视图矩阵的转置 UNITY_MATRIX_IT_MV 模型视图矩阵的逆转置 _Object2World 当前模型矩阵 _World2Object 当前世界矩阵的逆矩阵 这里要特别说明一下UnityObjectToClipPos(v.vertex)) 方法, 官方网站 上说明,在写Instanced Shader时,通常情况下并不用在意顶点空间转换,因为所有内建的矩阵名字在Instanced Shader中都是被重定义过的,如果直接使用UNITY_MATRIX_MVP,会引入一个额外的矩阵乘法运算,所以推荐使用UnityObjectToClipPos / UnityObjectToViewPos函数,它们会把这一次额外的矩阵乘法优化为向量-矩阵乘法。 相机 名称 类型 数值 _WorldSpaceCameraPos float3 世界空间相机的位置

基础篇 | 15 C++ 科学计算 - OpenBLAS的安装与使用

匿名 (未验证) 提交于 2019-12-03 00:22:01
类似于Anaconda里面的numpy,C++里面也有类似的矩阵运算库,称之为BLAS(Basic Linear Algebra Subprograms):基础线性代数子程序库。 支持的数据类型有: 单精度浮点数(float) 双精度浮点数(double) 单精度负数 双精度负数 在机器学习里面一般我们只用float类型,很少使用double,考虑到性能,我们认为float的精度已经够了,而且速度快。 还有一个更高级的叫LAPACK,现在我们常用的BLAS其实就是LAPACK里面的一部分。 BLAS支持对子程序的封装,其实就是子函数了,它的子程序分类: Level1: 标量操作、向量操作、向量-向量操作 Level2:矩阵-向量操作 Level3: 矩阵-矩阵操作 BLAS:标准实现(Fortran) CBLAS:C的BLAS标准实现 Atlas:一种优化实现 GotoBLAS:多线程性能良好的优化实现(已停止更新) OpenBLAS:目前性能最好的开源实现,基于GotoBLAS MKL:Intel实现,在Intel处理器上性能最佳 各种BLAS实现的优劣对比 市面上的BLAS实现非常多,最早是用Fortran。 CBLAS是C的BLAS标准实现,但是这种实现有个缺点,速度非常慢。 Atlas:比C要好,但不够好。比如腾讯QQ空间有一个功能,就是标脸框那个程序,怎么做呢

caffe中的矩阵运算函数caffe_cpu_gemm,cblas_sgemm等解析

匿名 (未验证) 提交于 2019-12-03 00:22:01
caffe中最典型且常用的卷积运算,是通过将卷积操作转化成矩阵乘法来实现的,因此,卷积层的一系列程序实际上就是在为矩阵的卷积式展开和矩阵乘法函数做准备,caffe_cpu_gemm也就是在调用矩阵乘法函数cblas_sgemm。 1.矩阵间乘法: 这里我们先来看一下这些矩阵乘法函数有输入需求,以单精度矩阵乘法函数cblas_sgemm为例: cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, A的列数, B, B的列数, beta, C, C的列数) 比如base_conv_layer.cpp中的forward_cpu_gemm: caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, conv_out_channels_ /group_, conv_out_spatial_dim_, kernel_dim_, (Dtype)1. , weights + weight_offset_ * g , col_buff + col_offset_ * g , (Dtype)0. , output + output_offset_ * g ); caffe中caffe_cpu_gemm为: template<> void caffe_cpu_gemm

矩阵的基本运算

匿名 (未验证) 提交于 2019-12-03 00:21:02
一、矩阵的加法与减法    1、运算规则   设矩阵 , ,   则         简言之,两个矩阵相加减,即它们相同位置的元素相加减!    注意: 只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的.   2、 运算性质 (假设运算都是可行的)   满足交换律和结合律   交换律  ;   结合律  . 二、矩阵与数的乘法   1、 运算规则    数 乘矩阵A,就是将数 乘矩阵A中的每一个元素,记为 或 .   特别地,称 称为 的负矩阵.   2、 运算性质   满足结合律和分配律   结合律: (λμ)A=λ(μA) ; (λ+μ)A =λA+μA .   分配律: λ (A+B)=λA+λB .    典型例题    例6.5.1  已知两个矩阵   满足矩阵方程 ,求未知矩阵 .    解  由已知条件知      三、矩阵与矩阵的乘法   1、 运算规则   设 , ,则A与B的乘积 是这样一个矩阵:   (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即 .   (2) C的第 行第 列的元素 由A的第 行元素与B的第 列元素对应相乘,再取乘积之和.    典型例题    例6.5.2  设矩阵   计算    解   是 的矩阵.设它为              想一想 :设列矩阵 ,行矩阵 , 和

稀疏矩阵――三元组顺序表

匿名 (未验证) 提交于 2019-12-03 00:15:02
Ŀ¼ 假设m n的矩阵中,有t的非零元,令s=t/m n,当,s<=0.05时,称此矩阵为稀疏矩阵,简单理解就是非零元特别少的矩阵 //一般矩阵a 1 2 3 a= 4 5 6 7 8 9 //稀疏矩阵s 0 0 0 0 0 0 2 0 0 5 s= 0 0 3 0 0 0 0 0 0 4 一个m * n的矩阵转置后变为 n * m的矩阵 //3*2的矩阵-转置前 1 2 4 5 7 8 //转置后变为2*3 1 4 7 2 5 8 转置后的矩阵每个元素的下表与原来的下表刚好相反,例如上面4转置前的下标为(2,1),转置后变为(1,2); 之所以引入三元组顺序表,是因为,对于稀疏矩阵而言,用传统的存储方法会造成存储空间的浪费 0 12 9 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 M= 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 -7 0 0 0 //上面矩阵用三元组表示 i j v 1 2 12 1 3 9 3 1 -3 3 6 14 4 3 24 5 2 18 6 1 15 6 4 -7 typedef struct { int i,j; //行坐标、列坐标 ElemType e; //元素 }Triple; typedef struct { Triple date[MAXSIZE+1]; //0不存储元素 int

[转] 理解矩阵

孤人 提交于 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矩阵,但从矩阵 出发更方便。 ,求导时矩阵被向量化,弊端是这在一定程度破坏了矩阵的结构

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