矩阵

matlab软件的矩阵和数组操作解析

血红的双手。 提交于 2019-12-26 09:33:54
矩阵和数组操作 Matlab中文含义就是矩阵实验室的意思,轻松灵活的处理矩阵式Matlab语言的特色。 概念: 数组:与其它编程语言一样,定义是:相同数据类型元素的集合。 矩阵:数学中早已定义。不再赘述,matlab中处理最多的是二维矩阵 矩阵的创建: 1直接输入 在命令行窗口中定义 A=[1,2,3;4,5,6;7,8,9] 分好是换行,逗号是本行 回车后如下图: 2函数法生成特殊的矩阵 (1)零矩阵:zeros(n) :生成n*n的零矩阵 zeros(n,m): 生成n*m的零矩阵 如下图: (2)单位矩阵:eye(n): 生成n*n的单位矩阵(对角线元素为1 其余元素为0) eye(n,m): 生成n*m的单位阵 如下图: (3)魔方矩阵(行、列、对角线元素和相同):magic()用法和以上函数一样 (4)对角矩阵(对角线上的矩阵非0):dig(1:5) :生成对角线元素为1,2,3,4,5 的5*5矩阵 如下图: (5)上三角矩阵(对角线以下的元素为0): triu() (6)下三角元素(对角线元素以上为0): tril() 代码: >> a=[1,2,3;4,5,6;7,8,9] a = 1 2 3 4 5 6 7 8 9 >> a=zeros(3,2) a = 0 0 0 0 0 0 >> a=eye(4) a = 1 0 0 0 0 1 0 0 0 0 1 0 0 0

matlab矩阵的操作

笑着哭i 提交于 2019-12-26 09:33:38
特殊矩阵 通用型的特殊矩阵 zeros函数:产生全0矩阵,即零矩阵 ones函数:产生全1矩阵,即幺矩阵 eye函数: 产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。 rand函数:产生(0,1)区间均匀分布的随机矩阵 randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。 以上函数三种调用格式 例: 产生m x m 零矩阵 :zeros(m) 产生m x n 零矩阵 :zeros(m,n) 产生与矩阵A同型的零矩阵 :zeros(sizeof(A)) 面向专门学科的特殊矩阵 1、 魔方矩阵:n阶魔方阵由1..n 2 共n 2 个整数组成,其每行每列及主、副对角线元素 之和都相等。当n>=2时,有多个不同的n阶魔方阵。 magic(n):产生一个特定(不是所有的)n阶的魔方阵 2、 范德蒙(Vandermonde的)矩阵(常用与通信编码纠错): vander(v)函数:生成以向量V为基础的范德蒙矩阵 3、 希尔伯特(Hilbert)矩阵:H( i , j )= 1/ (i+j-) Hilb(n)函数:生成n阶希尔伯特矩阵 4、 伴随矩阵(??): Compan(p)函数:求矩阵P的伴随矩阵 5、 帕斯卡矩阵:P( i , j )=p(i , j-1) + p(i-1,j) 且 p(i , 1)= p(1,j)=1 Pascal(n)函数:生成帕斯卡矩阵 矩阵变换

MATLAB 学习

倖福魔咒の 提交于 2019-12-26 09:33:21
一、eig函数的使用方法 在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有 5种: (1) E=eig(A):求矩阵A的全部特征值,构成向量E。 (2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成 V的列向量。 (3) [V,D]=eig(A,'nobalance'):与第2种格式类似,但第2种格式中先对A作相似 变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。 (4) E=eig(A,B):由eig(A,B)返回N×N阶方阵A和B的N个广义特征值,构成向量E 。 (5) [V,D]=eig(A,B):由eig(A,B)返回方阵A和B的N个广义特征值,构成N×N阶对 角阵D,其对角线上的N个元素即为相应的广义特征值,同时将返回相应的特征向 量构成N×N阶满秩矩阵,且满足AV=BVD。 eig Find eigenvalues and eigenvectors Syntax d = eig(A) d = eig(A,B) [V,D] = eig(A) [V,D] = eig(A,'nobalance') [V,D] = eig(A,B) [V,D] = eig(A,B,flag) d = eig(A)和 [V,D] = eig(A)最为常用 注意,第一列为对应第一个特征值的特征向量。

彻底理解数字图像处理中的卷积-以Sobel算子为例

回眸只為那壹抹淺笑 提交于 2019-12-26 09:04:55
彻底理解数字图像处理中的卷积-以Sobel算子为例 作者:FreeBlues 修订记录 - 2016.08.04 初稿完成 概述 卷积 在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨论卷积在数字图像处理中的应用. 在数字图像处理中, 有一种基本的处理方法: 线性滤波 . 待处理的平面数字图像可被看做一个大矩阵, 图像的每个像素对应着矩阵的每个元素, 假设我们平面的分辨率是 1024*768 , 那么对应的大矩阵的 行数 = 1024 , 列数 = 768 . 用于滤波的是一个滤波器小矩阵(也叫 卷积核 ), 滤波器小矩阵一般是个方阵, 也就是 行数 和 列数 相同, 比如常见的用于边缘检测的 Sobel 算子 就是两个 3*3 的小矩阵. 进行滤波就是对于大矩阵中的每个像素, 计算它周围像素和滤波器矩阵对应位置元素的乘积, 然后把结果相加到一起, 最终得到的值就作为该像素的新值, 这样就完成了一次滤波. 上面的处理过程可以参考这个示意图: 图像卷积计算示意图: 对图像大矩阵和滤波小矩阵对应位置元素相乘再求和的操作就叫 卷积 ( Convolution )或 协相关 ( Correlation ). 协相关 ( Correlation )和 卷积 ( Convolution )很类似, 两者唯一的差别就是 卷积 在计算前需要翻转 卷积核 , 而 协相关

协方差矩阵

删除回忆录丶 提交于 2019-12-26 07:31:05
一、统计学的基本概念 统计学里最基本的概念就是样本的均值、方差、标准差。首先,我们给定一个含有n个样本的集合,下面给出这些概念的公式描述: 均值: 标准差: 方差: 均值描述的是样本集合的中间点,它告诉我们的信息是有限的,而标准差给我们描述的是样本集合的各个样本点到均值的距离之平均。 以这两个集合为例,[0, 8, 12, 20]和[8, 9, 11, 12],两个集合的均值都是10,但显然两个集合的差别是很大的,计算两者的标准差,前者是8.3后者是1.8,显然后者较为集中,故其标准差小一些,标准差描述的就是这种“散布度”。之所以除以n-1而不是n,是因为这样能使我们以较小的样本集更好地逼近总体的标准差,即统计上所谓的“无偏估计”。而方差则仅仅是标准差的平方。 二、为什么需要协方差 标准差和方差一般是用来描述一维数据的,但现实生活中我们常常会遇到含有多维数据的数据集,最简单的是大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解更多,比如,一个男孩子的猥琐程度跟他受女孩子的欢迎程度是否存在一些联系。协方差就是这样一种用来度量两个随机变量关系的统计量,我们可以仿照方差的定义: 来度量各个维度偏离其均值的程度,协方差可以这样来定义: 协方差的结果有什么意义呢?如果结果为正值,则说明两者是正相关的(从协方差可以引出

np.concatenate详解和Numpy中的轴

拟墨画扇 提交于 2019-12-26 06:57:00
np.concatenate和Numpy中的轴 concatenate((a1, a2, ...), axis=0) 沿着指定的轴将指定的数组序列进行拼接 注意 :要拼接的原数组形状除了指定的拼接轴可以不同外,其他轴的形状必须都要相同 第一个参数 必须是一个多个数组的 元组 或者 列表 第二个参数 默认是 axis = 0,即按数组的0轴进行纵向的拼接注:一般axis = 0,就是对该轴向的数组进行操作。 NUMPY ARRAY AXES以’0’开头 NumPy中的数组轴是编号的,从0开始类似于Python中元组,列表,字符串的索引 在Numpy中的函数使用轴 建议 :注意轴参数控制的内容 在np.sum(),np.mean(),np.min(),np.median()和其他统计函数会聚合您的数据(即,当您在带有axis参数的二维数组上使用np.sum()时,它会将二维数组折叠为一维数组。它会折叠数据并减少维度) 将Numpy函数与axis参数一起使用时,指定的轴是折叠的轴 np_array_2d = np.arange(0, 6).reshape([2,3]) print(np_array_2d) [[0 1 2] [3 4 5]] np.sum(np_array_2d, axis = 0) 输出:array([3, 5, 7]) 当我们设置axis = 0时

第五单元数组整理

人盡茶涼 提交于 2019-12-26 04:58:12
本单元进行了数组的学习,同时有了之前顺序结构到循环结构的逐渐复杂的变化深入,数组的出现帮助我解决了前面很多困难使得大部分的程序的繁琐复杂有了很好的改善,我认为程序设计最有趣的地方之一就是可以把所接触到的东西以不同的方式都能连接起来,这里数组的应用还用到了高等代数的矩阵(虽然我高代也很烂。。。)也很深刻的感受到了难度等级的提升,现在作业的题有很多攻克不了的,好头疼,还很心累。 一、重要知识点总结 1.数组:数组是一种数据格式,能够储存多个同类型的值。Eg:数组可以存储60个int类型的值(这些值表示游戏五年来的销售量)、12个short(这些值表示每个月的天数)或365个float值(这些值指出一年中每天在食物方面的开销)每个值都存储在一个独立的数组元素中,计算机在内存中依次储存数组的各个元素。定义格式: 类型标识符 数组名[常量表达式];(类型标识符可以为任何基本数据类型或结构体;数组名必须是合法的标识符;常量表达式的值为数组元素个数。) int d [ 50 ] , g [ 100 ] ; int a [ 5 * 10 ] ; # define N 50 int b [ N ] ; 引用数组的格式: 数组名[下标 ] ( 下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,不能一次引用整个数组,只能逐个引用数组的单个元素。) 2. 一维数组的输入与输出

二维数组的查找

為{幸葍}努か 提交于 2019-12-26 03:55:01
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。针对这个问题,我们不妨也从一个具体的例子入手。下面我们以在题目中给出的数组中查找数字7为例来一步步分析查找的过程。 我们发现如下规律:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该 数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都 可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。 把整个查找过程分析清楚之后,我们再写代码就不是一件很难的事情了。下面是上述思路对应的参考代码: [cpp] view plain copy bool Find( int * matrix, int rows, int columns, int number) { bool found = false ; if (matrix != NULL && rows > 0 && columns > 0) { int row = 0; int

【面试题】二维数组的查找

孤人 提交于 2019-12-26 03:48:53
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路:从二维数组的右上角的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则可以排除它所在的列。如果它小于要查找的数字,则可排除它所在的行。这样如果要查找的数字不在数组的右上角,则每次判断都可以排除一行或一列以缩小查找范围,直到找到要查找的数字,或者查找范围为空。 下图是在二维数组中查找7的示意图: 参考代码: // 二维数组matrix // 每一行都从左到右递增排序 // 每一列都从上到下递增排序 bool Find(int *matrix, int rows, int columns, int number) { bool found = false; if(matrix != NULL && rows > 0 && columns > 0) { int row = 0; int column = columns - 1; while(row < rows && column >=0) { if(matrix[row * columns + column] == number) { found = true; break

二维数组中查找指定的数

孤人 提交于 2019-12-26 03:46:10
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析: 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束。如果该数字大于要查找的数字,就剔除这个数字所在的列。如果该数字小于要查找的数字,就剔除这个数字所在的行。   这样通过每次每次删除行或者列,来缩小查找范围。 代码: public class Solution { public boolean Find(int [][] array,int target) { int row=0; int col=array[0].length-1;//列数 while(row<=array.length-1&&col>=0){ if(target==array[row][col]){ return true; }else if(target<array[row][col]){ col--;//删除该列 }else{ row++;//如果target>array[row][col],删除该行 } } return false; } }    来源: https://www.cnblogs.com/GumpYan/p/5874601.html