矩阵

线性代数之——矩阵范数和条件数

守給你的承諾、 提交于 2019-12-06 02:34:34
1. 矩阵范数 我们怎么来衡量一个矩阵的大小呢?针对一个向量,它的长度是 \(||\boldsymbol x||\) 。针对一个矩阵,它的范数是 \(||A||\) 。有时候我们会用向量的范数来替代长度这个说法,但对于矩阵我们只说范数。有很多方式来定义矩阵的范数,我们来看看所有范数的的要求然后选择其中一个。 Frobenius 对矩阵中的所有元素进行平方 \(|a_{ij}|^2\) 再相加,然后 \(||A||_F\) 就是它的平方根。这就像把矩阵看作是一个很长的有 \(n^2\) 个元素的向量,这有时候会很有用,但这里我们不选择它。 向量范数满足三角不等式,即 $||\boldsymbol x+\boldsymbol y|| $ 不大于 $||\boldsymbol x|| + ||\boldsymbol y|| $, \(2\boldsymbol x\) 或者 \(-2\boldsymbol x\) 的长度变为两倍。同样的规则也应用于矩阵的范数: 第二个对矩阵范数的要求是新的,因为矩阵可以相乘。范数 \(||A||\) 控制着从 \(\boldsymbol x\) 到 \(A\boldsymbol x\) 和从 \(A\) 到 \(B\) 的增长。 根据此,我们可以这样定义矩阵的范数: 恒等矩阵的范数为 1,针对一个正交矩阵,我们有 \(||Q\boldsymbol x||=

深度学习之数学基础(线性代数篇)

空扰寡人 提交于 2019-12-06 01:53:09
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/z4909801/article/details/78359952 2-1、标量 一个标量就是一个单独的数,一般用小写的的变量名称表示。 2-2、向量 一个向量就是一列数,这些数是有序排列的。用过次序中的索引,我们可以确定每个单独的数。通常会赋予向量粗体的小写名称。当我们需要明确表示向量中的元素时,我们会将元素排 列成一个方括号包围的纵柱: 我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。 2-3、矩阵 矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。我们通常会赋予矩阵粗体的大写变量名称,比如A。 如果一个实数矩阵高度为m,宽度为n,那么我们说 。 2-4、张量 几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。 例如,可以将任意一张彩色图片表示成一个三阶张量,三个维度分别是图片的高度、宽度和色彩数据。将这张图用张量表示出来,就是最下方的那张表格: 其中表的横轴表示图片的宽度值,这里只截取0~319;表的纵轴表示图片的高度值,这里只截取0~4;表格中每个方格代表一个像素点,比如第一行第一列的表格数据为[1.0,1.0,1

python numpy的基本操作

三世轮回 提交于 2019-12-06 01:09:23
站长资讯平台 :文章目录 0、NumPy 与 ndarry 1、数组属性查看:类型、尺寸、形状、维度 2、numpy元素中数据存储方式,数据类型,类型转换 2.1 查看元素数据存储类型 2.2 元素数据存储类型转换 3、List类型与numpy. ndarray类型的互相转换 4、创建 ndarray 数组 4.1 方法一:列表转换 4.2 zero,ones,empty函数创建特殊数组 4.3 arrange linspace 创建线性数组 5、矩阵的索引与打印 6、矩阵的运算 6.1 基础运算 6.2 点乘 6.3 其他矩阵特征运算 6.3 排序、转置、数值裁剪 7、其他操作 7.1 横纵向的拼接 7.2 矩阵添加或拼接新元素(append或concatenate) 7.3 新增维度 7.4 增减数组维度 7.5 矩阵的切片 7.6 reshape,ravel,flatten,transpose,shape,resize更改数组形状 8、常用操作 8.1 元素平方和 8.2 numpy转换成tensorflow的tensor LAST、未来得及添加的内容 0、NumPy 与 ndarry NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生。 它提供: 快速高效的多维数组对象 ndarray; 直接对数组执行数学运算及对数组执行元素级计算的函数;

Python numpy的基本操作你一般人都不会

拟墨画扇 提交于 2019-12-06 00:32:09
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 PS:如有需要最新Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=a3a533247e4c084a72c9ae88c271e3d1 来看正文: 0、NumPy 与 ndarry NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生。 它提供: 快速高效的多维数组对象 ndarray; 直接对数组执行数学运算及对数组执行元素级计算的函数; 线性代数运算、随机数生成; 将 C、C++、Fortran 代码集成到 Python 的工具等。 它专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或Matlab 等所做的任务。 ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。 ndarray 的一个特点是同构:即其中所有元素的类型必须相同。 1、数组属性查看:类型、尺寸、形状、维度 import numpy as np a1 = np.array([1,2,3,4],dtype

最容易理解的对卷积(convolution)的解释

折月煮酒 提交于 2019-12-05 23:30:07
本文转自: 最容易理解的对卷积(convolution)的解释 https://www.cnblogs.com/alexanderkun/p/8149059.html 最容易理解的对卷积(convolution)的解释 啰嗦开场白 读本科期间,信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积。硕士期间又学了线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念。至于最近大火的深度学习,更有专门的卷积神经网络(Convolutional Neural Network, CNN),在图像领域取得了非常好的实际效果,已经把传统的图像处理的方法快干趴下了。啰啰嗦嗦说了这么多卷积,惭愧的是,好像一直以来对卷积的物理意义并不是那么清晰。一是上学时候只是简单考试,没有仔细思考过具体前后的来龙去脉。二是本身天资比较愚钝,理解能力没有到位。三则工作以后也没有做过强相关的工作,没有机会得以加深理解。趁着年前稍微有点时间,查阅了一些相关资料,力争将卷积的前世今生能搞明白。 1.知乎上排名最高的解释 首先选取知乎上对卷积物理意义解答排名最靠前的回答。 不推荐用“反转/翻转/反褶/对称”等解释卷积。好好的信号为什么要翻转?导致学生难以理解卷积的物理意义。 这个其实非常简单的概念,国内的大多数教材却没有讲透。 直接看图,不信看不懂。以离散信号为例,连续信号同理。

数据科学初阶(四)-- numpy数组生成以及矩阵转换

淺唱寂寞╮ 提交于 2019-12-05 23:29:19
文章说明: 本系列面向全国大中小学的通用数据科学教材, 原项目 是由 Jin Li 大佬整理的python笔记,鄙人学习后添加了许多自己的见解,于是最后写成了这系列手册。 文章目录 生成数组 1. 使用`arange`函数 2. 使用`linspace`函数 3. 生成网格数组 使用`meshgrid`函数 使用`ogrid` , `mgrid`函数 4. 使用`r_`,`c_`生成行列向量 5. 生成特殊数组 零矩阵 元素全为一的矩阵 生成随机数组 产生一个相似的数组 生成单位数组矩阵 生成矩阵 生成数组 1. 使用 arange 函数 arange函数类似range函数,其返回值为数组。 语法: # arange(start, stop=None, step=1, dtype=None) import numpy as np np . arange ( 4 ) # 返回 array([0,1,2,3]) 同时可以为 arange 函数生成的数组设置步长: # 设置步长为0.1 np . arange ( 0 , 1 , 0.1 , dtype = np . float ) 2. 使用 linspace 函数 linspace函数可以生成一个等差数组,其参数列表为起始值、终止值以及数组元素的个数。 # 与arange函数不同的是 # linspace第三个参数设置的是元素个数

二维数组中的查找

倖福魔咒の 提交于 2019-12-05 22:39:01
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 最开始题目理解错了,以为二维数组是从上到下,从左到右递增排列的。题目的意思是每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,数组可能是这样的:[[1,2,8,9],[4,7,10,13]]。 错误代码 class Solution { public: bool Find(int target, vector<vector<int> > array) { int i; if(array.size()==0){ return false; } if(array[0].size()==0){ return false; } for (i = 0; i<array.size(); i++) { if (target<array[i][0]) { if (i == 0) { return false; } int j; for (j = 0; j < array[i - 1].size(); j++) { if (target == array[i - 1][j]) { cout << i - 1 << ", " << j << ", " << array[i - 1

文献阅读笔记—Attention is ALL You Need

自闭症网瘾萝莉.ら 提交于 2019-12-05 22:20:25
本文主要是参考 https://yq.aliyun.com/articles/342508?utm_content=m_39938 https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/#positional-encoding-pe 将互相缺少的融合到一起,略微加了点其他东西。 一、简介 对于Seq2Seq任务,均采用encoder-decoder+attention的模型,以往的encoder-decoder采用rnn或cnn,捕捉输入输出的全局信息,attention捕捉输入和输出之间的侧重关系;而这篇google大作,采用的是attention做encoder-decoder;也就是说,模型中只有attention, 没有rnn或者cnn。 二、模型整体架构 encoder由6个相同的层堆叠在一起,每一层又有两个支层。第一个支层是一个多头的自注意机制(Multi-head attention),第二个支层是一个简单的全连接前馈网络(position-wise FFN)。在两个支层外面都添加了一个residual的连接,然后进行了layer nomalization的操作。模型所有的支层以及embedding层的输出维度都是dmodel=512. Stage1

R语言函数化编程笔记1

ぐ巨炮叔叔 提交于 2019-12-05 22:12:40
R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助。 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那么就会成为该包的贡献者。。 R的编辑器 一般会在Rstudio中编写一个脚本文件来执行多行代码,可以编写R脚本,Rmarkdown文档,网页等,或者C++源代码 常用快捷键 ctrl+enter组合键运行选中命令 ctrl+shift+S组合键执行当前文档,也就是依次执行当前文档中的所有表达式 Tap或者ctrl+space组合键展示匹配当前输入变量和函数的自动补齐列表 单击行数边缘左侧设置一个断点,就是debug,下次执行这行的时候程序会停下来检查 查看帮助文档的方式 在Help帮助窗格里面输入函数名能够直接找到 在console中输入函数名并按F1键 在console中输入“?函数名”并执行它 我感觉,我R语言函数编程这里在数据处理这里老老是出bug,我感觉应该是对于每个函数的数据类型使用不当。 因为每个对象都有其不同的类型和性质 数据类型 4.1 向量 4.1.1 数值向量 4.1.2 逻辑向量 4.1.3 字符向量 4.2 给向量命名 可以通过names()获取向量中函数的名字 names(x) ## "a" "b" "c" 或者通过对向量赋予不同字符向量来更改元素名称

Pytorch(一)入门:Tensor基础

元气小坏坏 提交于 2019-12-05 21:16:03
torch.Tensor 基础 Tensor就是pytorch中存储数据的主要格式,跟numpy类似 这里,我们先介绍一些最基本的操作和常用的功能 在numpy中,我们是通过shape来获取数组的形状,而在我们的tensor当中,我们使用size来得到形状。 有时候,我们需要对数组形状进行改变,我们可以采用 .view() 的方式 可以注意到test5通过test4变形的时候,是从test4的第一行从左至右,然后第二行从左至右…这样形成3x2的矩阵的。 torch.Tensor 支持大量的数学操作符 + , - , * , / 都是可以用的。 当然也可以用Tensor内置的 add() 等, 这里需要提一下的就是 add 和 add_ 的区别 使用add函数会生成一个新的Tensor变量, add_ 函数会直接再当前Tensor变量上进行操作 所以,对于函数名末尾带有"_" 的函数都是会对Tensor变量本身进行操作的 tensor对矩阵同样支持 跟numpy一样,再Tensor中,也存在Broadcasting 当二元操作符左右两边Tensor形状不一样的时候,系统会尝试将其复制到一个共同的形状。例如a的第0维是3, b的第0维是1,那么 a + b这个操作会将b沿着第0维复制3遍。 Tensor和Numpy的相互转换 一些其他的常用的操作 torch.unsqueeze()