矩阵转置

[ch01-03]神经网络基本原理

醉酒当歌 提交于 2019-12-05 04:14:43
系列博客,原文在笔者所维护的github上: https://aka.ms/beginnerAI , 点击star加星不要吝啬,星越多笔者越努力。 前言 For things I don't know how to build, I don't understand. 如果我不能亲手搭建起来一个东西,那么我就不能理解它。 -- 美国物理学家理查德·费曼 在互联网发达的今天,很多知识都可以从网络上找到,但是网络上的博客、文章的质量参差不齐,或者重点不明确,或者直接把别人的博客抄袭过来。这种状况使得广大的初学者们学习起来很困难,甚至误入歧途,增加了学习曲线的陡峭程度。当然也有很多博主非常非常负责任,文章质量很高,只是连续度不够,正看得过瘾的时候,没有后续章节了,无法形成知识体系。 初学者也可以选择看一些教材或者理论书籍,但是,一个鸡生蛋蛋生鸡的问题出现了:如果你不懂,那么看完了理论你还是不会懂;如果你懂了,那么你就没必要看理论。这也是很多教材或者理论书籍的缺憾。 笔者也看过吴恩达老师的课,理论知识讲得由浅入深,还是非常清楚的,虽然代码示例基本没有,但仍然强烈建议大家去看。笔者的心得是:视频可以事先缓存在手机中,利用一些时间片段就可以学习了。 社会上还有一些网课,在线讲解深度学习的知识,笔者也参加了几个团购,老师和助教一般都很负责任,最后可以回看录像,下载PPT课件

pytorch 花式张量(Tensor)操作

元气小坏坏 提交于 2019-12-05 02:34:09
一、张量的维度操作 1.squezee & unsqueeze x = torch.rand(5,1,2,1) x = torch.squeeze(x)#去掉大小为1的维度,x.shape =(5,2) x = torch.unsqueeze(x,3)#和squeeze相反在第三维上扩展,x.shape = (5,2,1) 2.张量扩散,在指定维度上将原来的张量扩展到指定大小,比如原来x是3 1,输入size为[3, 4],可以将其扩大成3 4,4为原来1个元素的复制 x = x.expand(*size) 3.转置,torch.transpose 只能交换两个维度 permute没有限制 x = torch.transpose(x, 1, 2) # 交换1和2维度 x = x.permute(1, 2, 3, 0) # 进行维度重组 4.改变形状,view&reshape 两者作用一样,区别在于是当从多的维度变到少的维度时,如果张量不是在连续内存存放,则view无法变成合并维度,会报错 x = x.view(1, 2, -1)#把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor x = x.reshape(1, 2, -1) 5.张量拼接 cat & stack torch.cat(a

numpy.linalg.svd函数

血红的双手。 提交于 2019-12-04 20:35:49
本文链接:https://blog.csdn.net/rainpasttime/article/details/79831533 函数:np.linalg.svd(a,full_matrices=1,compute_uv=1)。 参数: a是一个形如(M,N)矩阵 full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N) 。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。 compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。 返回值: 总共有三个返回值u,s,v u大小为(M,M),s大小为(M,N),v大小为(N,N)。 A = u*s*v 其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。 例子: >>> from numpy import * >>> data = mat([[1,2,3],[4,5,6]]) >>> U,sigma,VT = np.linalg.svd(data) >>> print U [[-0.3863177 -0.92236578] [-0.92236578 0.3863177 ]] >>> print sigma [9

05-转置-置换-向量空间R

核能气质少年 提交于 2019-12-04 16:22:19
一、置换矩阵   一个矩阵的行或者列交换,可以借助另外一个矩阵相乘来实现   首先是行交换: $\underbrace{\left[\begin{array}{ccc}{1} & {1} & {1} \\ {2} & {2} & {2} \\ {3} & {3} & {3}\end{array}\right]}_{A} \stackrel{S_{12}}{\rightarrow} \underbrace{\left[\begin{array}{ccc}{2} & {2} & {2} \\ {1} & {1} & {1} \\ {3} & {3} & {3}\end{array}\right]}_{A_{2}}$ 也就是矩阵的第一行和第二行进行了互换    对于$A_2$的第一行,相当于从$A$中拿出了0个第一行,1个第二行,0个第三行进行加和   对于$A_2$的第二行,相当于从$A$中拿出了1个第一行,0个第二行,0个第三行进行加和   对于$A_2$的第三行,相当于从$A$中拿出了0个第一行,0个第二行,1个第三行进行加和    之前我们讲过 ,行向量乘以一个矩阵,结果等于矩阵的每行的线性组合   上面的 $P_{12}$ 称为行置换矩阵。可以看出置换矩阵是行重新排列了的单位矩阵,它的一个特性是:$\mathrm{P}^{-1}=\mathrm{P}^{\mathrm{T}}$

Java 数组

匆匆过客 提交于 2019-12-04 13:22:28
一维数组 1)声明: 类型 []变量名 或 类型 变量名[] int [] a 或 int a[]; 注意声明数组时不要规定数组的长度,长度在初始化即分配空间时给定 2)初始化: 数组是一个对象,用new分配空间 静态初始化 int [] a = {1,2,4}; 动态初始化 int [] a = new int[n] 或 int a[] = new int[n] 这里的n可以是一个变量,在声明数组之前声明n的大小即可 初始化时可以不声明大小,可以直接给定数组元素的值 int [] a = new int[]{1,2,4}; 但不可在声明大小的同时赋值 int [] a = new int[3]{1,2,4}; 注意数组大小是不可变的,一旦声明不可改变大小 看一个例子: int[] a = new int[2]; a = new int[3]; 编译运行都正常,看起来像是重新定义了数组的大小,验证一下 int a[] = new int[2]; a[0] = 1; a[1] = 2; a = new int[3]; System.out.println(a[0] + " " + a[1]); 输出是0 0,说明数组a已经不是原来的a了,这里相当于重新创建一个大小为3的数组 3)访问 单个元素使用下标访问:a[0] 遍历可用for循环或foreach。 二维数组

高数 矩阵的基本运算

旧城冷巷雨未停 提交于 2019-12-04 11:39:36
一、介绍 1、介绍。 矩阵的运算,本质上就是二维数组的运算。 2、公共代码。 /** * 打印二维数组 * * @param a 二维数组a */ public static void print ( double [][] a) { print(a, 5 , 0 ); } /** * 打印二维数组 * * @param a 二维数组a * @param precision 如果是浮点型的话,保留几位小数 */ public static void print ( int [][] a, int width, int precision) { String str = "%" + width + "d " ; for ( int i = 0 ; i < a.length; i++) { int [] aItem = a[i]; for ( int j = 0 ; j < aItem.length; j++) { System.out.print(String.format(str, aItem[j])); } System.out.println(); } } /** * 打印二维数组 * * @param a 二维数组a * @param precision 如果是浮点型的话,保留几位小数 */ public static void print ( double [][] a,

Basic

这一生的挚爱 提交于 2019-12-04 08:08:16
Basic %% % 获得函数帮助说明 help randi %% result=[log(2.7),log2(2),log10(10),exp(1)]; disp(result) % 2*3:[0,1]间均匀分布矩阵 rand(2,3) % 3*3:[0,1]间均匀分布矩阵 rand(3) % randi([min,max],m,n):m*n均匀分布随机数矩阵,含两端 choic=randi([0,2],1,4) % 复数 2+i*4 %% % 运算优先级:() > ^ > * / > + - % 变量使用前无需申明 % 数字默认double 类型 % i,j 指向复数的虚部 i j % 无穷大 Inf % log(0) eps % not a number NaN pi % 指向最近一个匿名结果 ans % 变量优先级:变量>内建函数>子函数 cos='string' cos(3) %'r' %% % 格式化输出,四舍五入式 % format bank:2位小数, short:4位小数,long :15位小数,shortE:short 的科学计数法形式,longE:long的科学计数法形式 % format hex:16进制,rat:分数形式 format bank a=12/6.5 %% a=[1,2,3];% 行向量 b=[1;2;3];%列向量 a*b% 矩阵乘法 %%

奇异分解(SVD)理论介绍

萝らか妹 提交于 2019-12-04 04:54:49
一、前言 奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,主要应用如下: 信息检索(LSA:隐性语义索引,LSA:隐性语义分析),分解后的奇异值代表了文章的主题或者概念,信息检索的时候同义词,或者说同一主题下的词会映射为同一主题,这样就可以提高搜索效率 数据压缩:通过奇异值分解,选择能量较大的前N个奇异值来代替所有的数据信息,这样可以降低噪声,节省空间。 推荐系统:主要是降噪,矩阵变换至低维空间(分解后还原的矩阵元素值作为原本缺失值的一种近似),方便计算(目前没有意识到它对推荐精确度的提升有什么具体作用)。 二、奇异值与特征值基础知识: 特征值分解的方法比较简单,有趣的是探究什么样的矩阵可以进行特征值分解以及矩阵进行特征值分解之后展现出的矩阵有意思的性质。特征向量矩阵S 是一个正交矩阵,一般写作 Q,也就是实对称矩阵的特征值分解可以写作: 首先,要明确的是,一个矩阵其实相当于一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。 特征值分解也有很多的局限

python numpy学习

若如初见. 提交于 2019-12-03 12:04:42
以下代码来源于本博文作者观看 大神视频 并纯手敲。 目录 numpy的属性 创建array numpy的运算1 随机数生成以及矩阵的运算2 numpy的索引 array合并 array分割 numpy的浅拷贝和深拷贝 numpy的属性 import numpy as np array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(array) print(array.ndim) # 维度 2 print(array.shape) # 形状 (3, 3) print(array.size) # 大小 9 print(array.dtype) # 元素类型 int32 numpy创建array import numpy as np a = np.array([1, 2, 3], dtype=np.int32) print(a.dtype) # int32 b = np.array([1, 2, 3], dtype=np.float) print(b.dtype) # float64 c = np.array([1, 2, 3]) d = np.array([[1, 2, 3], [4, 5, 6]]) print(d) # 二维矩阵 zero = np.zeros((2, 3)) print(zero) #

matlab关于矩阵的操作

北慕城南 提交于 2019-12-03 09:59:02
一.矩阵表示 例如,A = [1,2,3;3,4,5].其中,矩阵的元素可以是数值、变量、表达式或者函数。 二.矩阵的创建 特殊矩阵的创建:a. ones(): ones(n)表示生成一个n*n的全1矩阵、ones(m,n)生成m*n的全1矩阵          b.zeros(): 类似ones()函数,其生成全0矩阵          c.rand(): 产生在(0,1)间均匀分布的矩阵          d. randn() : 产生均值为0,方差为1的标准正态分布随机矩阵          e.eye() :产生单位阵 三.矩阵的获取 1.获取元素:一种是直接元素下标索引,列如:Matrix(i,j);一种是元素序号索引,列如:Matrix(m)。其中,m = (j-1)*M+i,也就是一列一列的来,像Z型循环。 2.矩阵截取:(1) A( :,j )表示取A矩阵的第j列全部元素; A(i,:) 表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 (2) A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。 四.矩阵运算 1. ’(转置):对实数矩阵进行行列互换,对复数矩阵,共轭转置,特殊的,操作符