矩阵

MATLAB小常识2

两盒软妹~` 提交于 2020-01-23 23:32:47
11.矩阵的运算 "*" ,''/''代表矩阵之间的乘除法-----> A * B ; 或者 A / B ; ".*","./"代表两个形状矩阵对应元素之间的乘除法 -----> A .* B ; 或者 A ./B ;(无间隔) B的逆矩阵-----> inv(B) ; A矩阵中每个元素都与常数相乘除-------> A.*n ;或者 A./n ;(常数n) A矩阵中每个元素同时乘方------> A.^2 ; 12.特征值和特征向量的求法 求方阶矩阵A的特征值构成向量E-----> E = eig(A) ;(n阶就有n个) 求A的特征值D(对角矩阵)和特征向量V(列向量)------> [V,D] = eig(A) ;(V中每一列都是D中对应列的特征值对应的特征向量) 13.find函数 返回向量A中不为零的元素索引-----> index = find(A) ; 返回向量A中不为零的前两个元素的索引-----> index = find(A,2) ; 返回矩阵A中不为零的元素索引-----> [x,y] = find(A) ;(x,y为向量) 返回矩阵A中不为零的前两个元素的索引-----> [x,y] = find(A,2) ;(x,y为向量) 来源: https://www.cnblogs.com/Zannier/p/12231574.html

No.1 二维数组中的查找

陌路散爱 提交于 2020-01-23 22:18:26
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路 牛客网中是用一个嵌套的向量表示的,这样更加的直观。从右上角开始考虑,如果目标比右上角的要小,那么排除这一列;如果目标比右上角的大,那么排除这一行; 代码 class Solution { public : bool Find ( int target , vector < vector < int > > array ) { int row = array . size ( ) ; // 行 int column = array [ 0 ] . size ( ) ; //列 int x = 0 , y = column - 1 ; while ( y >= 0 && x < column ) { if ( target == array [ x ] [ y ] ) return true ; else if ( target < array [ x ] [ y ] ) y -- ; else x ++ ; } return false ; } } ; 来源: CSDN 作者: 天杪 链接: https://blog.csdn.net/qq_15046309/article

数组元素分配、数组初始化、数组引用

ⅰ亾dé卋堺 提交于 2020-01-23 17:54:16
数组指:相同类型的变量按一定顺序组成的一种复合函数类型,而这些相同类型的变量称为数组的元素或单元; 特点: 1、数组的创建需要经过两个步骤:声明数组、为数组分配变量; 2、数组通过数组名加索引来使用数组的元素;如:a[2] 3、数组属于引用型变量; 数组声明(只是声明,并没有进行元素的分配) 一维数组声明有两种形式: 1、int a[],b[],c[] ; 2、int [] a,b,c[] ; //其中c为二维数组:语句相当于 int a[],b[],c[][] ; 二维数组声明有两种形式: 1、int a[][],b[][],c[][] ; 2、int [][] a,b,c[] ; //其中c为三维数组:语句相当于 int a[][],b[][],c[][][]; 上面第2种形式的声明中,可以同时声明一维、二维或多维数组; 数组元素的分配(以一维数组进行演示) 数组元素的分配有两种方式实现: 1、先进行数组的声明,再进行数组元素的分配; int test[] ; //声明一个数组test; test = new int [10] ; //为数组test分配了十个元素个数 2、在声明数组的同时进行元素的分配; int test[] = new int[3]; //声明一个数组test,并为其分配了三个元素个数 * 二维数组的声明和一维数组是一样的; 需要注意的是: int test

动态规划进阶

拟墨画扇 提交于 2020-01-23 16:45:02
理论解析 动态规划其实就是记住之前问题的答案,然后利用之前问题的答案来分析并解决当前问题,这里面有两个非常重要的步骤,就是 拆解问题 和 定义状态 。 这次来针对具体的一类动态规划问题,矩阵类动态规划问题,来看看针对这一类问题的思路和注意点。 矩阵类动态规划,也可以叫做坐标类动态规划,一般这类问题都会给你一个矩阵,矩阵里面有着一些信息,然后你需要根据这些信息求解问题。 一般来说,在思考这类动态规划问题的时候,我们只需要思考当前位置的状态,然后试着去看当前位置和它邻居的递进关系,从而得出我们想要的递推方程,这一类动态规划问题,相对来说比较简单 不同路径 说明: m 和 n 的值均不超过 100。 题目解析: 问题拆解:题目中说了,每次移动只能是向右或者是向下,矩阵类动态规划需要关注当前位置和其相邻位置的关系,对于某一个位置来说,经过它的路径只能从它上面过来,或者从它左边过来,因此,如果需要求到达当前位置的不同路径,我们需要知道到达其上方位置的不同路径,以及到达其左方位置的不同路径 状态定义:矩阵类动态规划的状态定义相对来说比较简单,只需要看当前位置即可,问题拆解中,我们分析了当前位置和其邻居的关系,提到每个位置其实都可以算做是终点,状态表示就是 “ 从起点到达该位置的不同路径数目 ” 递推方程:dp[i][j]=dp[i][j-1]+dp[i-1][j] 实现

四元数和欧拉角

空扰寡人 提交于 2020-01-23 16:28:53
来源:http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和 欧拉旋转 。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。 那么, 四元数 又是什么呢?简单来说,四元数本质上是一种高阶复数(听不懂了吧。。。),是一个四维空间,相对于复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。那么,它和旋转为什么会有关系呢? 在Unity里,tranform组件有一个变量名为rotation,它的类型就是四元数。很多初学者会直接取rotation的x、y、z,认为它们分别对应了Transform面板里R的各个分量。当然很快我们就会发现这是完全不对的

最大子矩阵

你离开我真会死。 提交于 2020-01-23 16:13:00
(仅用于记录个人思路) 题目:给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 输入:输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。 输出:对于每组数据,输出一个整数,表示子矩阵的最大和。 SI: 1 4 5 2 2 3 361 649 676 588 992 762 156 993 169 662 34 638 89 543 525 165 254 809 280 SO: 2474 # include <bits/stdc++.h> # define ll long long using namespace std ; int m , n , x , y , s = 0 , t , a [ 1005 ] [ 1005 ] ; int main ( ) { cin >> t ; while ( t -- ) { cin >> m >> n >> x >> y ; for ( int i = 1 ; i <= m ; i ++ ) { for ( int j = 1 ; j <= n ; j ++ ) cin >> a [ i ] [ j ] ;

顺序表练习(四):上三角矩阵的压缩存储公式推导以及代码实现

孤者浪人 提交于 2020-01-23 05:50:19
前言 本篇博客会较为详细地讲一下我个人对三角矩阵压缩存储公式的理解,希望能给后面的朋友们带来一些帮助。 等差数列的求和公式 由于三角矩阵的压缩存储公式是依靠求和公式来推导的,所以得先补一下等差数列的求和公式。 求和公式一: 其中n是整个数列的项数, 是数列的首项,d是数列的公差(递增数列公差为正数,递减数列公差为负数)。 求和公式二: 其中n为整个数列的项数, 是数列的首项, 是数列的末项。下面主要用到这个公式二。 上三角矩阵压缩储存公式的推导 首先我们知道,压缩储存上三角矩阵,本质上就是将矩阵的上三角块的元素“展开”成一条长的数列存在数组里。问题就在于,我们 如何根据原矩阵里元素的行号和列号得到压缩后数组里对应的下标? 我们可以这样考虑: 对于一个上三角块里第i行第j列的元素 ,它在数组里的下标就等于(在原矩阵中)他前面i-1行的元素数量 + (原矩阵中)他所在行的他前面的元素数量 ,以下面这个矩阵为例, 在数组里的位置就应该是它前面两行元素的数量5+4=9,再加上 所在行它前面的元素数量1(即是 ),最终结果10即是 在数组中的位置(当然,转换成物理下标的话还需要-1)。 那么问题又来了, 我们如何才能知道前面1到i-1行的元素数量? 这个时候就要用到我们的等差数列求和公式了,我们可以从上到下地将每行的 元素数量 看成一个数列,对于上图的矩阵来说,这个数列就是5 4 3 2 1

AcWing 901 滑雪

[亡魂溺海] 提交于 2020-01-23 04:43:51
题目描述: 给定一个R行C列的矩阵,表示一个矩形网格滑雪场。 矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。 一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。 当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。 下面给出一个矩阵作为例子: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 在给定矩阵中,一条可行的滑行轨迹为24-17-2-1。 在给定矩阵中,最长的滑行轨迹为25-24-23-…-3-2-1,沿途共经过25个区域。 现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。 输入格式 第一行包含两个整数R和C。 接下来R行,每行包含C个整数,表示完整的二维矩阵。 输出格式 输出一个整数,表示可完成的最长滑雪长度。 数据范围 1≤R,C≤300, 0≤矩阵中整数≤10000 输入样例: 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 输出样例: 25 分析: 本题是一个搜索问题,适合用记忆化搜索解决。设f[i][j]表示从(i,j

行列式和矩阵的区别

我的未来我决定 提交于 2020-01-23 03:12:49
1,本质上 (1)行列式是一个数,一个值。当有未知数时就是一个表达式。 (2)矩阵是一个数表,一种数据结构,可以按照数据库表结构来理解,也可以理解成二维数组。 矩阵是不能像行列式那样计算的!! 2,数学符号表示上 (1)行列式是用双竖线表示的。 (2)矩阵是用括号表示的,大括号或者中括号。 3,结构上 (1)行列式的行和列数目必须相等n x n。 (2)矩阵的行和列数目不一定相等m x n,当行和列数目相等时被称为方阵n x n。 4,运算上 (1)相等: ①行列式相等,就是值相等,行和列数目不必相等,数据也不必相等。 ②矩阵相等,行和列数目必须相等,对应位置的数据也必须相等。 (2)加减: ①行列式相加减,就是两个数值相加减,结果还是数值。 ②矩阵相加减,对应位置的数据相加减。 (3)数乘: ①一个数乘以行列式,只能乘以行列式的一行或者一列。 ②一个数乘以矩阵,矩阵的每个元素都要乘上这个数。 (4)乘法 ①行列式相乘,就是两个数值相乘,结果还是数值。 ②矩阵相乘,A x B,矩阵A的行数需与矩阵B的列数相等。矩阵乘法不满足交换律,一般的, 注:行列式几何意义参考博文: https://blog.csdn.net/u010916338/article/details/104070193 来源: CSDN 作者: 无极仙翁 链接: https://blog.csdn.net

《统计学习方法》(第十七章)——潜在语义分析

回眸只為那壹抹淺笑 提交于 2020-01-23 02:31:52
单词向量空间与话题向量空间 单词向量空间 话题向量空间 潜在语义分析算法 矩阵奇异值分解算法 例子 非负矩阵分解算法 非负矩阵分解 潜在语义分析模型 非负矩阵分解的形式 算法 来源: CSDN 作者: mkopvec 链接: https://blog.csdn.net/mkopvec/article/details/103866468