矩阵

MATLAB矩阵的翻转求逆旋转转置

浪子不回头ぞ 提交于 2020-01-10 03:46:52
对角阵 对角矩阵 只有对角线上有非零元素的矩阵 数量矩阵 对角线上的元素相等的对角矩阵 单位矩阵 对角线上都为1的对角矩阵 (1)提取矩阵的对角线上的元素 diag(A) 提取矩阵A主对角线元素,产生一个列向量。 diag(A,k) 提取第k条对角线上的元素 k=0是中间的那条对角线 (2)构造对角矩阵 diag(V) 产生一个主对角线为V的对角阵 diag(V,k) 向量v为第k条对角线 例子 先建立5阶矩阵A,然后将A的第一行元素乘以1,第二行乘以2,……,第五行乘以5. >> A=[4 5 6 7 8;9 5 3 1 6;4 6 2 3 6;5 3 5 4 6;5 6 4 6 4] A = 4 5 6 7 8 9 5 3 1 6 4 6 2 3 6 5 3 5 4 6 5 6 4 6 4 >> D=diag(1:5) D = 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 >> F=D*A F = 4 5 6 7 8 18 10 6 2 12 12 18 6 9 18 20 12 20 16 24 25 30 20 30 20 三角阵 上三角阵 矩阵的对角线一下的元素全为零的矩阵 (1)ttiu(A) triu(A,k) 下三角阵 …………………上……………………… (2)tril(A) tril(A,k) 矩阵的转置

行列式,矩阵的秩,迹,范数,条件数

血红的双手。 提交于 2020-01-10 01:56:34
方阵的行列式 det(A) 求方阵的A所对应的行列式的值 矩阵的秩 rank(A) 求矩阵A的秩 求3~20阶魔方阵的秩 for n=3:20 magic(n) r(n)=rank(magic(n)) bar(r) grid on end 矩阵的迹 迹等于对角线之和等于特征值之和 trace(A)求矩阵的A的迹 向量和矩阵的范数 norm(V)或norm(V,2) 计算向量V的2范数 矩阵A的转置的最大特征值的平方根 norm(V,1)计算向量V的1范数 矩阵列元素绝对值之和的最大值 norm(V,inf)计算向量V的∞范数 所有矩阵行向量绝对值之和的最大值 矩阵的条件数 条件数是范数与逆矩阵范数的乘积 条件数越接近于一,矩阵的性能越好 cond(A,1) 1范数条件数 cond(A)或cond(A,2) 2 cond(A,inf) 无穷 来源: CSDN 作者: qq_41724350 链接: https://blog.csdn.net/qq_41724350/article/details/103913734

剑指offer-二维数组中的查找

不问归期 提交于 2020-01-10 01:38:02
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 暴力查找,复杂度O(n*m) 数组在某种程度是有序的,可以从右上角或者左下角开始判断筛选,逐渐缩小范围,最坏的复杂度O(n + m) AC代码 class Solution { public : // bool Find(int target, vector<vector<int>> array) { // for (int i = 0;i < array.size();i++) // { // for (int j = 0;j < array[i].size();j++) // { // if (target == array[i][j]) // return true; // } // } // return false; // } bool Find ( int target , vector < vector < int >> array ) { int row = array . size ( ) ; //行数 int col = array [ row - 1 ] . size ( ) ; //列数 注意这里求要将row-1 //cout << row << "

10344 矩阵连乘积的加括号方式数

时间秒杀一切 提交于 2020-01-10 00:57:45
10344 矩阵连乘积的加括号方式数 时间限制:800MS 内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC;VC Description 给定n个矩阵{A1,…,An},其中Ai和Ai+1可乘,i=1,2,…,n-1。考察矩阵连乘积加括弧的方式数。 如四个矩阵连乘积A1A2A3A4,共有五种不同的加括弧方式: ( A1 ( A2 ( A3 A4 ) ) ) ( A1 ( ( A2 A3 ) A4 ) ) ( ( A1A2 ) ( A3 A4 ) ) ( A1 ( A2 A3 ) A4 ) ( ( ( A1 A2 ) A3 ) A4 ) 输入示例: 4 输出示例: 5 输入格式 输入矩阵连乘积的个数n(n<=20)。 输出格式 输出矩阵连乘积加括号的方式数。 输入样例 4 输出样例 5 提示 这个问题在书上3.1节(P46)有详细探讨。 对于n个矩阵的连乘积,设不同的计算次序(就是加括号方式数)为P(n)。假设最后一次括号加在第k个和第k+1个 (k=1…n-1)之间。 则P(n)的递归式如下: P(n) = 1 if n=1; P(n) = sum{ P(k)*P(n-k) | for k=1 to n-1 } if n>1 计算P(n)即可。 另外,此题需要注意的是,如果你写的纯递归程序可能会超时的,因为这里递归存在重复,且重复数量庞大

二维数组查找

淺唱寂寞╮ 提交于 2020-01-09 21:59:27
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请 完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 按照一般搜索二维数组的方法,从左到右,从上到下,比较难根据这个数组的特点进行快速搜索。可以从 右到左,从上到下,这样在查找的时候,跟每一个元素相关的行和列连接起来是一个有序的数列,因此很容易的 确定下一步搜索是往左还是往下。 public boolean Find(int [][] array,int target) { boolean result=false; if(array==null||array.length<=0||array[0].length<=0){ return false; } int i=0,j=array[0].length-1; while(i<array.length&&j>=0){ if(array[i][j]==target){ result=true; break; }else if(array[i][j]<target){ i++; }else{ j--; } } return result; } 来源: https://www.cnblogs.com/huangbei1990/p/5742434.html

二维数组查找

岁酱吖の 提交于 2020-01-09 02:07:23
1.int a; int*a; int **a; int (*a)[10]; int (*a) (int)的区别。 a) int a 表示一个内存空间,这个空间用来存放一个整数。 b) int *a指向一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间。 c) int **a表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。指向了一个b)中提到的空间。 d) int(*a)[10]表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个长度为10,类型为int的数组;与int **a的差别主要体现在a++上。 e) int (*a) (int)表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个函数,这个函数有一个int型的参数,并且函数的放回类型也是int。 2.当声明一个数组时,数组的名字也是一个指针。32位系统上,对任意指针求sizeof,得到的结果都是4. 当数组作为函数参数进行传递时,数组自动退化为同类型的指针。 3.例题:二维数组中的查找。 二维数组的每一行是按从左到右递增以及从上到下递增来排序的,判断数组中是否含有一个整数。 解决思想:找到最右边的列的第一个数,如果比要寻找的数大,则该列都不用再考虑,如果比要寻找的数小,则该行都不用再考虑。递归求解。

剑指offer 20.顺时针打印矩阵

﹥>﹥吖頭↗ 提交于 2020-01-09 00:59:16
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路: 就像是打印回形针一样哈哈,减而治之的思路,设置一个范围lx rx ty dy 每次从左到右,从上倒下,从右到左,从下到上 启发或者坑 回形针,最后只剩下一行或者一列的时候,应该进行特判【看可不可以处理特殊情况】 代码 class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; int x = 0; int y = 0; int lx = 0; int ty = 0; int dy = matrix.size()-1; //矩阵为空特殊处理 if (dy <0) return res; int rx = matrix[0].size()-1; while(lx <= rx && ty<=dy) { //cout << lx << " " << rx << " " <<endl; //cout << ty << " " << dy << " " <<endl; y = ty

1160 蛇形矩阵

蹲街弑〆低调 提交于 2020-01-08 21:53:27
第一部分:题目 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为对角线数字之和 样例输入 Sample Input 3 样例输出 Sample Output 5 4 3 6 1 2 7 8 9 25 第二部分:思路 思路:从中心位置开始,以逆时针方向“行走”,改变方向的条件是:当前位置的下一方向上没有走过,利用初始化数组为0,来判断,如果为0说明没有走过。 其次需要稍微注意的是:在计算对角线上数字和的时候,因为中心位置的数字加了两次,所以要减去一个中心位置数字,也就是1。 第三部分:代码 #include<stdio.h> int main() { int n,i,j,dir=1,s[100][100]={0},sum=0;//dir表示方向,有1,2,3,4四个值,分别表示右、上、左,下 scanf("%d",&n); //中间位置 i=n/2; j=i; s[i][j]=sum++; //sum 表示当前所要填写的数字,中间位置肯定为1

C++学习之OpenCV篇,Mat类型详解,小白教学

 ̄綄美尐妖づ 提交于 2020-01-08 19:58:46
本篇主要介绍Mat类的使用。在我们肉眼可以看到一幅幅图片,但是图片存储在计算器并且使用编码进行处理的时候,是以图像中的每一个点的数据进行存储,这么庞大的数据存储在哪里呢?Mat类型应运而生。 在OpenCV库中点击Mat的定义,你会发现Mat的类型是一个类。 一、类中首先定义了几种构造函数。具体可参考官网介绍。 1、Mat(int rows, int cols, int type);rows代表2D数组中的行数,cols代表2D数组中的列数,这两个参数可以合并起来写成Size(size)。type的类型为CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4,CV_8UC(n),最后一个数字是创建n通道的矩阵。灰度图一般是1,彩色的是RGB三个通道,4代表具有透明色的彩色图片。一般图片格式都是unsigned 8bits,所以中间是8U, S–代表—signed int—有符号整形 U–代表–unsigned int–无符号整形 F–代表–float---------单精度浮点型 2、Mat(int rows, int cols, int type, const Scalar& s); 最后一个参数用于初始化每个矩阵元素的可选值。 要将所有矩阵元素设置为构造后的特定值,使用赋值运算符。 Mat image ( 2 , 2 , CV_8UC3 , Scalar ( 0 , 0

二维数组和二维指针作为函数的参数

江枫思渺然 提交于 2020-01-07 18:09:37
不管是在工作上,还是最近在LeetCode上刷题。都错误的认为 二维数组 和 二维指针作为函数的参数时是等价的。这种认知是错误的。究其原因,还是对数组和指针理解的不深入。今天把我的理解做一个总结: 假如一个函数的形参是一个二维指针,但是你实参传入的是一个二维数组。那么你就会编译报错。 为什么我会错误的认为二维数组作为函数参数的时候等价于二维指针呢? 我思考了我为什么会这么想的原因了:一维数组作为函数参数的时候,编译器会把数组名当作指向该数组第一个元素的指针。所以我想当然的以为:既然一维数组和一维指针在函数参数中等价,那二维数组应该就等价于二维指针啊。 但是很遗憾,二维数组作为函数参数并等价于二维指针。因为 数组作为函数参数时转换为指针没有传递性 。也就是说你不能认为一维数组和一维指针作为函数参数等价,就认为二维数组和二维指针就等价了。在C语言中没有这样的传递性。 其实仔细想想,也是很容易明白的。二维数组其实就是一个数组的数组(即它是一个一维数组,只不过它的每个元素又都是一个一维数组)。当二维数组作为函数入参时,比如 int a[3][4]; 它的第一维数组会被转换成指针,相当于是传入了一个指向数组的指针。即作为函数参数, int a[3][4]和 int (*p)[4]等价。那 int (*p)[4]和 int **pp等价吗?肯定不等价呀, p指针指向类型是 int [4]