矩阵

采用主成分法实现因子分析中的参数估计

半腔热情 提交于 2019-12-27 18:50:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> factpca<-function(x,score="Bartlett",rotation="varimax") { if(!is.matrix(x)){ x<-as.matrix(x) #x为原始的数据矩阵 } z<-scale(x,center=TRUE,scale=TRUE) #将原始数据矩阵标准化 p<-ncol(x) #求观测变量的个数 if(p<3){ stop("factor analysis requires at least three variables") } cr<-cor(z) #求相关系数矩阵 eig<-eigen(cr) #求矩阵的特征值与特征向量 s=sum(eig$values) tmp=0.0 flag=0 for(i in 1:length(eig$values)){ tmp=tmp+eig$values[i] flag=i if(tmp/s>=0.8) break } rowname<-paste("X",1:p,sep="") colname<-paste("Factor",1:flag,sep="") A<-matrix(0,nrow=p,ncol=flag,dimnames=list(rowname,colname)) #构造因子载荷矩阵,初始化为0 for(j

图形学的矩阵变换

喜夏-厌秋 提交于 2019-12-27 17:52:32
确定一个四棱锥的一块空间,两个断面之间的空间就是需要投影的空间 gluLookAt的函数的作用,它封装了世界坐标系到观察坐标系的转换,从“从一个点去看另一个点的方法(ps:包括方向)” 世界坐标系是最大的坐标系,最小的是模型坐标系;最后显示的结果是观察坐标系; 可以建立一个巨大的虚拟世界,这个世界里面包含了很多的对象; 但是这个世界是没有“观察”的;等有了“观察”之后,就需要观察的位置和产生的结果的地方(gluLookAt);并且需要哪些东西可以在观察的位置出现,这个就是gluPerspective 模型矩阵描述了一系列变换的信息。我们首先计算物体的模型矩阵,然后将物体每个顶点的坐标(在局部的物体坐标系下)都左乘该模型矩阵,得到这一帧该物体每个顶点的坐标。 三大变换: 模型视图变换 (自身) 投影变换  (观察) 视口变换(显示) 在模型矩阵中,我们关心物体在变换后处在世界坐标系下的位置。事实上,我们更加关心物体相对于观察者的位置。最简单的方案是将观察者置于原点处,面向z轴正半轴,那么空间中的点在世界坐标系下的位置就是其相对于观察者的位置。观察者的位置和方向变化时(用一个变换来描述),就好像整个世界的位置和方向进行了相反的变换。所以,在所有物体的模型矩阵的左侧再乘以一个表示整个世界变换的模型矩阵,就可以了。这个表示整个世界变换的矩阵又称为“视图矩阵”,因为他们经常一起工作

NLP系列(7)_Transformer详解

这一生的挚爱 提交于 2019-12-27 16:31:12
Ref https://jalammar.github.io/illustrated-transformer/ , https://blog.csdn.net/han_xiaoyang/article/details/86560459 编者按:前一段时间谷歌推出的BERT模型在11项NLP任务中夺得SOTA结果,引爆了整个NLP界。而BERT取得成功的一个关键因素是Transformer的强大作用。谷歌的Transformer模型最早是用于机器翻译任务,当时达到了SOTA效果。Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快速并行。并且Transformer可以增加到非常深的深度,充分发掘DNN模型的特性,提升模型准确率。在本文中,我们将研究Transformer模型,把它掰开揉碎,理解它的工作原理。 正文: Transformer由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。 在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。 Attention is All

Numpy

时间秒杀一切 提交于 2019-12-27 07:22:10
ndarray的优势—为什么快? 存储空间连续,访问速度快 可以并行执行-Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。 numpy基于矩阵,矩阵可以分块计算,所以可以实现并行 ndarray的属性 Shape—形状—注意:返回的是元组 ndim—维度的个数—就是shape的长度 size—元素个数=shape的各个值想乘 dtype—元素的类型 ndarray的形状 生成数组的方法 生成0和1的数组 np.ones(shape) np.ones_like(array)—根据给定数组生成一个形状一样的数组 np.zeros np.zeros_like 从现有数组生成 np.array--深拷贝 np.asarray--浅拷贝 生成固定范围的数组 np.linspace—start,stop,num 在star到stop之间等区间的选取num个数,注意:一定可以去到stop np.arange(start,stop,step) 以start未开始,每隔step取一个值 stop肯定取不到(左闭右开) 等于python的range np.logspace(start,stop,num) 以10为低的指数值,等比 生成随机数组 均匀分布 np.random.rand—0

Python-EEG工具库MNE中文教程(10)-信号空间投影SSP数学原理

余生长醉 提交于 2019-12-27 07:18:27
目录 projector(投影)和投影背景 案例解释投影原理 导入工具库 什么是projector(投影)? 计算正交平面 使用SVD计算投影矩阵 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 projector(投影)和投影背景 projector(投影)(简称proj),也称为信号空间投影(SSP),定义了应用于空间上的EEG或MEG数据的线性操作。 可以将该操作看做是一个矩阵乘法,通过将数据投影到较低维度的子空间来降低数据的秩。 这种投影算子可以同时应用于数据和正向运算,用于源定位。注意,可以使用这样的投影算子来完成EEG平均参考。 它存储在info[‘projs’]中的测量信息中。 案例解释投影原理 导入工具库 import os import numpy as np import matplotlib . pyplot as plt from mpl_toolkits . mplot3d import Axes3D # noqa from scipy . linalg import svd import mne # 定义绘制3d图像 def setup_3d_axes ( ) : ax = plt . axes ( projection = '3d' ) ax . view_init (

矩阵操作

喜欢而已 提交于 2019-12-27 05:21:04
矩阵操作(数组) 题目描述 给定一个N阶初始矩阵,现有以下操作 TRANSLATE: 转置,即将aij变为aji,操作结束后输出矩阵 ADD: 将该矩阵与一矩阵相加得到一新矩阵,操作结束后输出这一新矩阵 MULTIPLY: 与该矩阵与一矩阵相乘得到一新矩阵,操作结束后输出这一新矩阵(此处不懂矩阵乘法请自行百度) SUM:输出两条对角线上元素之和(不重复计算) 输入 测试数据只有一组 输入的第一行给出一个整数N(1 <= N <= 5),代表矩阵的阶数 下N行代表这一矩阵,其数值都是整数 其后的每一行都是操作,数据保证输入合法 操作以 OVER 结束 输出 具体输出见样例 样例输入 2 1 0 0 1 TRANSLATE ADD 1 0 0 1 ADD 2 0 0 2 MULTIPLY 1 2 3 4 SUM OVER 样例输出 1 0 0 1 2 0 0 2 4 0 0 4 4 8 12 16 40 提示 # include <bits/stdc++.h> using namespace std ; void ts ( int a [ ] [ 100 ] , int n ) ; void add ( int a [ ] [ 100 ] , int n ) ; void mu ( int a [ ] [ 100 ] , int n ) ; void su ( int a [ ] [

模拟实现银行家算法c语言

萝らか妹 提交于 2019-12-27 01:33:04
因为课设要做银行家算法,就写着记录一下。在网上看了很多,有java也有c。借鉴别人的,自己试着改了一下。 银行家算法: 第一模块:银行家算法中的数据结构 为了实现银行家算法,在系统中必须设置这样四个数据结构,分别用来描述系统中可用的资源,所有进程对资源的最大需求,系统中的资源分配,以及所有的进程话需要多少资源的情况。 1.可利用资源向量Available。这是一个含有m个元素的数组,其中的而每一个元素代表一类可利用资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态的改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。 2.最大需求矩阵Max。这是一个n m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K;则表示进程i需要Rj类资源的最大数目为K。 3.分配矩阵Allocation。这也是一个n m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。 4.需求矩阵Need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成任务。 上述三个矩阵间存在下述关系:Need[i,j]=Max[i,j]

OpenCV学习笔记(1):仿射getAffineTransform和warpAffine

二次信任 提交于 2019-12-27 00:49:27
由于工作原因,最近开始研究图像处理相关技术,开始接触OpenCV,主要是为了重构PACS系统中的平移、缩放和旋转三个图像操作的接口函数。opencv作为目前计算机视觉领域的热门开源库,有着稳定且功能强大的优点。下面是刚接触时的一些研究,主要是学习仿射,及一些相关的函数接口的使用,这里整理一下,方便以后查看,若有错误的地方还请谅解,随意评论纠正! 看到很多代码示例都有cv::Mat的字眼,cv是opencv中的一个头文件,我们先简单介绍一下Mat这个类 cv::Mat: 用于分配内存创建对象 采用类的特性,将内存管理和数据信息封装在类的内部,学过c++11的小伙伴应该就很熟悉,这个描述与智能指针很像 主要组成:矩阵头和矩阵数据 拷贝赋值:采用 浅拷贝 的方式,只复制矩阵头信息,引用矩阵数据 优点: 不需要手动申请一块内存; 在不需要时不用再手动释放内存; 可以通过类的封装,方便的获取到数据的相关信息。 看完它所具有的优点,让人联想到C++11的共享指针,而Mat也是采取引用计数的方法,当引用计数变为0时释放内存。 接下来接下一些接口函数: Mat imread ( const string & filename , int flag = 1) 功能:读取图像 filename: 图片路径名 flag: 载入标识,指定加载图像的颜色类型,默认值为1,表示三通道的彩色图像 -1

矩阵微积分的一些实用结论与推导

断了今生、忘了曾经 提交于 2019-12-26 23:06:56
矩阵微积分的一些实用结论与推导 向量与矩阵的相关运算 矩阵的一元运算 矩阵的拉直算子 矩阵的迹 矩阵的行列式 伴随矩阵与矩阵的逆 矩阵的二元运算 矩阵的乘法 Hadamard乘积 Kronecker积 数量对向量的导数 数量对列向量的导数 对内积运算求导 对矩阵与向量的乘积求导 对二次型求导 矩阵对矩阵的导数 数量对矩阵的导数 对矩阵的一元运算求导 对拉直算子求导 对矩阵的迹求导数 对矩阵的行列式求导数 对矩阵的二元运算求导 对矩阵的乘法求导 对矩阵的Hadamard乘积求导 对矩阵的张量积求导 在一些优化问题中,经常会出现选择向量或者矩阵来最优化某个目标函数的情况,要想从理论上求解这类优化,就需要正确计算目标函数关于向量或者矩阵的导数。比如多元回归模型中,要用最小二乘法估计回归系数,需要做以下的最优化: min ⁡ β Q = ( Y − X β ) 2 {\min_{\beta}} Q=(Y - X\beta)^2 β min ​ Q = ( Y − X β ) 2 然而现有的教材和论文都只是需要什么就临时查证推导一下,很少有系统地总结目标函数怎么对向量或矩阵求导的资料。这篇博文比较全面地整理了向量与矩阵的一些常用运算,以及怎么对这些常用运算求导的方法。有张量积和拉平算子就足以解决大部分领域的问题了,所以这篇博文不会涉及张量以及张量分析的内容

unity shader之预备知识

北城以北 提交于 2019-12-26 20:09:18
1.渲染流水线 任务:从一个三维场景出发,生成(或者渲染)一张二维图像。即:计算机需要从一系列的定点出数据,纹理等信息出发,把这些信息最终转换程一张人眼可以看到的图像。而这个工作通常是由CPU和GPU共同完成的。 三个阶段: (1)应用阶段(CPU):1.准备场景数据。2.粗粒度剔除工作。3设置模型的渲染状态,输出渲染所需要的几何信息. 应用阶段大致可以分为三个阶段: 1.把数据加载到显存中。 2.设置渲染状态。渲染状态:定义场景中的网格是怎样被渲染的。如:使用那个顶点着色器/片元着色器。 3.调用DrawCall。DrawCall是一个命令,发起方为CPU,接收方为GPU。 (2)几何阶段:把定点坐标变换到屏幕空间中,再交给光栅器进行处理。对输入的渲染图源进行多部处理后,将会输出屏幕空间的二维顶点坐标,每个定点对应的深度值,着色等相关信息。 (3)光栅化阶段:产生屏幕上的像素,并渲染最终的图像。光栅化的任主要是决定每个渲染图源中的那些像素应该被绘制再屏幕上。对上一阶段得到的逐定点数据进行插值,然后再进行逐像素处理。 为了避免我们看到的那些正在进行光栅化的图元,GPU会使用双重缓冲策略(前置缓冲,后置缓冲)。当场景被渲染到后置缓冲中,GPU会交换前后置缓冲中的内容,前置缓冲事之前显示在屏幕上的图像。 (1)顶点着色器:处理单位是顶点,输入进来的每个定点都会调用一次定点着色器