矩阵

对称矩阵、方阵、逆矩阵、协方差矩阵

纵然是瞬间 提交于 2020-02-23 17:59:49
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 矩阵的高级函数:基于SVD算法(即奇异值分解法)的矩阵分解、通过SVD算法(即奇异值分解法)/特征值分解法来实现PCA算法、随机数矩阵 1.对称矩阵 2.方阵、逆矩阵 X是一个m行n列的矩阵,并不能保证其有逆矩阵,因此X需要乘以X的转置,即X乘以自身的转置矩阵,其结果为一个方阵, 方阵即行数和列数都为一样,这样便能保证其矩阵X有逆矩阵。 X是一个m行n列的矩阵,X的转置(自身的转置矩阵)是一个n行m列的矩阵,那么两者相乘结果为m行m列的方阵,方阵即行数和列数都为一样。 X是一个n行m列的矩阵,X的转置(自身的转置矩阵)是一个m行n列的矩阵,那么两者相乘结果为n行n列的方阵,方阵即行数和列数都为一样。 求X乘以X的转置的逆矩阵,即求X的方阵的的逆矩阵。 3.协方差矩阵 1.PCA算法中求协方差矩阵 2.特征脸法: 1.特征脸法是一种相对“古老”的人脸识别算法,而特征脸法的核心算法是PCA算法。 2.特征脸法中的经过零均值化处理后的m行n列图像矩阵: m为人脸图像的维度,n为人脸图像的样本数,行数为人脸图像的flatten后的维度数,列数为数据集的人脸图像的样本数, 人脸图像的flatten后向量作为列向量。 3

计算机图形学:基本变换

放肆的年华 提交于 2020-02-23 17:39:03
基本变换 1 基向量的变换 1.1 基向量的变换 初始基向量为 i ^ ( 1 , 0 ) , j ^ ( 0 , 1 ) \hat{i}(1,0),\hat{j}(0,1) i ^ ( 1 , 0 ) , j ^ ​ ( 0 , 1 ) ,经过变换后变为 i ^ ( 3 , − 2 ) , j ^ ( 2 , 1 ) \hat{i}(3,-2), \hat{j}(2,1) i ^ ( 3 , − 2 ) , j ^ ​ ( 2 , 1 ) 1.2 线性变换对向量的作用 仅需取出向量的坐标,将它们分别于矩阵的特定列相乘,然后将结果相加即可 逆时针旋转90°的例子 当两个向量变为线性相关时,两个向量共线,二维空间会被挤压到一维 2 Transformation Classification(分类) 2.1 Rigid-body Transformation (刚体变换) 物体本身的长度、角度、大小不会变化包括: Identity(不变) Translation(平移) Rotation(旋转) 以及他们的组合 2.2 Similarity Transformation(相似变换) 保持角度 Identity(不变) Translation(平移) Rotation(旋转) Isotropic Scaling(均衡缩放) 以及他们的组合 2.3 Linear

冒险家(八数码问题)

落花浮王杯 提交于 2020-02-23 15:45:03
这题是翻译了八数码问题(POJ — 2893),然后稍加修改。 Description 小D在地下世界探索时,找到了一座藏有无数奇珍异宝的王国,可是进入王国有一扇门,当且仅当你将门上的矩阵变成国王心中的完美矩阵时,大门方可打开。一向不喜欢数字的小D傻眼了,现求助于你,请你帮助他看他是否能进入王国,获得奇珍异宝。 规则如下: 给定一个M N的矩阵(M和N其中必有一个奇数),矩阵上滑贴的编号为1 – (M N – 1),请你通过移动滑板(滑板在矩阵中用0表示),在不越界的情况下可上下左右移动。请你判断通过变换它是否能变成一个国王心中的顺序矩阵 例:一个3*3的顺序矩阵如下: 1 2 3 4 5 6 7 8 0 Input 多组输入。第一行为两个整数m和n,当m和n同时为0程序结束。(1 <= m,n <= 1000),接下来是一个m*n的矩阵。 Output 输出只有一行,如果小D能进入王国获得奇珍异宝请输出YES,否则输出NO; 每两组输出之间空一行 思路: 参考八数码有解情况,可得出如下结论: 两个矩阵的线性数组的逆序对的奇偶相同时,它们其中一个可以通过相邻元素之间的交换变成另外一个,前提是列数为奇数;若列数不为奇数 则需判断空格位置的竖直距离对2取余与逆序对数目对2取余的情况。 顺序矩阵逆序对为0,是偶数 //由于数据量较大,建议使用快读加快写入数据 愉快AC #include

python(leetcode)-48旋转图像

点点圈 提交于 2020-02-23 11:07:21
给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]  这道题其实不难懂,有线性代数基础的人都知道转置矩阵,虽然这题与转置不同但是题目意思相似。90度顺时针旋转矩阵。并且要求不能新建矩阵存储即在原矩阵上操作。 虽然题目不难懂,但是做起来非常麻烦,笔者想了很久才做出这题,主要是逻辑上的思路一定要清晰。 先上代码(通过-44ms)击败99% 1 class Solution: 2 def rotate(self, matrix): 3 """ 4 :type matrix: List[List[int]] 5 :rtype: void Do not return anything, modify matrix in-place instead. 6 """ 7 lens=len(matrix[0]) 8 for i in range(lens//2): #对第i行进行换位操作 9 for j in range(i,lens-1-i): #对第j列进行换位操作 10 temp

numpy的基础运算(一)

前提是你 提交于 2020-02-23 03:57:01
Numpy:python中最基础的科学运算库,一个在Python中做科学计算的基础库,重在数值计算,多用于在大型、多维数组上执行数值运算。 numpy 数组的生成 a = np.array([[0, 1], [5, 9]]) # 列表间带逗号 print(a) b = np.arange(4) print(b) c = np.arange(4).reshape((2, 2)) print(c) 数组的运算 # *对应位置的数逐个相乘 print(a*c) # 矩阵运算的话用: d = np.dot(a,c) # 等同于 d = a.dot(c) 元素内部运算,筛选相关操作 e = np.random.random((2, 4)) print("e",e) print(np.sum(e)) #行或列当中求和 print(np.sum(e, axis=0)) # 每列求和 print(np.sum(e, axis=1)) # 每行求和 print(np.min(e)) print(np.max(e)) np.argmin(c) # c中的最大值 输出位置索引 np.argmax(c) # c中最小值 输出位置索引 np.mean(c) or c.mean() # 计算c的平均值 np.average(c) or c.average() # 与上相同 算均值 np.median(c) #

OpenGL视点变换,模型变换,投影变换,视口变换详解

荒凉一梦 提交于 2020-02-23 03:40:31
OpenGL视点变换,模型变换,投影变换,视口变换详解 http://blog.csdn.net/yhb5566/article/details/7714319 作者:luck_net | 出处:博客园 | 2012/2/22 14:46:49 | 阅读112次 OpenGL通过相机模拟、可以实现计算机图形学中最基本的三维变换,即几何变换、投影变换、裁剪变换、视口变换等,同时,OpenGL还实现了矩阵堆栈等。理解掌握了有关坐标变换的opengl图片内容,就算真正走进了精彩地三维世界。 一、OpenGL中的三维物体的显示 (一)坐标系统 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,将三维物体及二维数据联系在一起的唯一纽带就是坐标。 为了使被显示的三维物体数字化,要在被显示的物体所在的空间中定义一个坐标系。这个坐标系的长度单位和坐标轴的方向要适合对被显示物体的描述,这个坐标系称为世界坐标系。世界坐标系是始终固定不变的。 OpenGL还定义了局部坐标系的概念,所谓局部坐标系,也就是坐标系以物体的中心为坐标原点,物体的旋转或平移等操作都是围绕局部坐标系进行的,这时,当物体模型进行旋转或平移等操作时,局部坐标系也执行相应的旋转或平移操作。需要注意的是,如果对物体模型进行缩放操作,则局部坐标系也要进行相应的缩放,如果缩放比例在案各坐标轴上不同

剑指offer - 顺时针打印矩阵

只谈情不闲聊 提交于 2020-02-23 03:39:06
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7] 解法一:一圈一圈的数(C++) 我们可以用一个循环来打印矩阵,每一次打印矩阵中的一个圈。现在我们来分析循环结束的条件: 假设这个矩阵的行数是rows,列数是columns。打印第一圈的左上角的坐标是(0,0),第二圈的左上角的坐标是(1,1),以此类推。我们可以选取矩阵中的左上角为(start,start)的一圈作为我们分析的目标。 对一个5*5的矩阵,最后一圈只有一个数字,对应的坐标为(2,2),我们发现5>2*2。对一个6*6的矩阵而言,最后一圈有4个数字,其左上角的坐标仍然为(2,2),我们发现6>2*2依然成立。于是我们可以得出,让循环继续的条件是:columns>start*2并且rows>start*2 我们可以将打印一圈分为下面四步: 第一步:从左到右打印一行 第二步:从上到下打印一列 第三步:从右到左打印一行 第四步:从下到上打印一列 但是并不是每一次都要四步走完

对二维动态数组vector使用sort()函数的结果

左心房为你撑大大i 提交于 2020-02-23 01:45:57
sort() 在不引入 cmp 时默认状态是 algorithm 中以字典序从小到大排序,而对于二维数组 vector ,也可以使用 sort(vector.begin(),vector.end()); ,结果是不改变每一行内数组内容,而对各行从首元素往后按字典序对各行排序。 来源: CSDN 作者: Mickeyyyyyyy 链接: https://blog.csdn.net/GalaxyFan/article/details/104445850

python表示矩阵

試著忘記壹切 提交于 2020-02-23 01:39:20
在c语言中,表示个“整型3行4列”的矩阵,可以这样声明:int a[3][4];在python中一不能声明变量int,二不能列出维数。可以利用列表中夹带列表形式表示。例如: 表示矩阵 ,可以这样: count = 1 a = [] for i in range(0, 3): tmp = [] for j in range(0, 3): tmp.append(count) count += 1 a.append(tmp) print a 结果:[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 但是注意一点:初始化(赋值全部为0时),下面是错误的!! tmp = [] for j in range(0, 3): tmp.append(0) a = [] for i in range(0, 3): a.append(tmp) print a 结果 :[[0, 0, 0], [0, 0, 0], [0, 0, 0]] 原因 :这样的列表tmp为同一个,改变任意行,其他行都会给随着改变, 千万注意!!, 下面正确: a = [] for i in range(0, 3): tmp = [] for j in range(0, 3): tmp.append(0) a.append(tmp) print a 来源: https://www.cnblogs.com

MATLAB特殊矩阵以及矩阵转置

天大地大妈咪最大 提交于 2020-02-23 01:14:10
特殊矩阵 通用特殊矩阵 zeros函数:产生全0矩阵,即零矩阵。 ones函数:产生....1矩阵,即幺矩阵。 eye函数:产生对角线为1的矩阵,当矩阵是方正时,得到单位矩阵。 rand函数:产生(0,1)区间均匀分布的随机矩阵。 randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。 ------------------------------------------------------------------------------------------------ zeros(m):产生mxm的零矩阵。 zeros(m,n):....mxn... zeros(size(A)):产生跟A相同大小的矩阵,A是几维,零矩阵为几维。 fix(a+(b-a+1)*x):产生[a,b]区间上均匀分布的随机数。 u+fx:均值为u,方差为f^2的随机数。 eye(m,n)产生mxn的单位矩阵、 m与n不相等时,则会产生一行或一列0. (1)魔族矩阵:magic(3) 每行,列对角都为15(1+2+3+...+n^2)/n=(n+n^3)/2 (2)范德蒙矩阵:v=[v1,v2....,vn]; ... vander(v)..............vander(1:5) (3)希尔伯特矩阵 (4)伴随矩阵 (5)帕斯卡矩阵 根据:二项式定理,(x+y)