矩阵

01.二维数组中的查找

自闭症网瘾萝莉.ら 提交于 2019-12-23 23:26:49
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 public class Solution { public boolean Find(int target, int [][] array) { if(array.length == 0) { return false; } for(int i = 0; i < array[0].length; i ++) { for(int j = 0; j < array.length; j ++) { if(array[j][i] == target) { return true; } } } return false; } }    来源: https://www.cnblogs.com/Jolivan/p/9253395.html

二维数组,图,数,基本概念

寵の児 提交于 2019-12-23 19:52:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 点与点之间的之间,用线段连接起来。即为图。图分有向图与无向图。 图与二维数组的转换 如:将下图转化为二维数组。该图是无向图。 (即1号位置可以去2号位置,2号位置也可以去1号位置。) 每个小圆点代表一个地点,连线代表可达。那么用二维数组表示:行数,列数表示地点。由地点1到地点1,用0表示。因此,中间的对角线都是0. 无重大表示不可达。1表示2点之间可达。根据上图:深度搜索画法 第一步:根据上图可以看出,从1号地点出发,可以到达2,号,3号,5号。所以第一列的2,3,5标为1 。其余标为无重大。 第二步:根据图可以看出,从2号位出发,只可以到达4号位,因为是无向图。所以2可以到达1号位。如图,该位标为1 类似的,第3号,4号,5号标出来。即转化为二维数组。 同样的,一个图的二维数组转化为图,也可以读图来实现。图是解决点与点之间的问题路径,在计算机中,存储图用到的即为二维数组。 树与图的关系 树是指任意两个节点之间,有且仅有一条线连通的 无向图 。 二叉树 :树的子节点最多有2个的数。 完全二叉树 :如果二叉树的每个子节点都是两个(最后一层可以不满)即为满二叉树(完全二叉树),完全二叉树只需要用一个链表即可存储。 下图都是满二叉树: 题外:图是我们通常解决问题的方法,转化为二维数组。才可以方便计算器处理

2019年8月19日矩阵

浪子不回头ぞ 提交于 2019-12-23 19:00:27
矩阵 相乘最重要的方法是一般矩阵 乘积 。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。 定义 设 A 为 的矩阵, B 为 的矩阵,那么称 的矩阵 C 为矩阵 A 与 B 的乘积,记作 ,其中矩阵C中的第 行第 列元素可以表示为: 如下所示: 注意事项 当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。 基本性质 乘法结合律: ( AB ) C = A ( BC ). [2] 乘法左分配律:( A + B ) C = AC + BC [2] 乘法右分配律: C ( A + B )= CA + CB [2] 对数乘的结合性 k ( AB )=( kA ) B = A ( kB ). 转置 ( AB ) T= B T A T. 矩阵乘法一般不满足交换律 [3] 。 乘积-哈达马积( hadamard product) 矩阵 与 矩阵 的Hadamard积记为 。其元素定义为两个矩阵对应元素的乘积 的 m×n 矩阵 [2] 。例如,

奇异值分解(SVD)原理及应用

若如初见. 提交于 2019-12-23 13:45:11
一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1)特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是: 上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 它所描述的变换是下面的样子:   这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换

PCA降维及SVD

荒凉一梦 提交于 2019-12-23 12:37:36
PCA降维 1.相关背景 我们在实际工作中经常需要分析不同组呈现来的成千上百个指标的数据,这些指标之间经常有一些相关性指标,比如厘米和英尺,这样的指标我们只要保留一个就可以,还有一些隐藏的高度相关的特征,以通过降维方法来进行数据预处理。 2. 数据降维 主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维方法,属于无监督学习。所谓降维就是将数据指标从高维度减到低维度,因为低维度的数据有如下优点: 1) 更容易进行数据分析和数据可视化 2)更容易进行数据存储 3)降低算法的运行成本 3.PCA原理 样本点分布在正交属性空间中,我们如何找到一个超平面(直线的高维推广)对所有样本点最合适的表达? 1.最近重构性:样本点到这个超平面的距离足够近(类似线性回归) 2.最大可分性:样本点到这个超平面的投影尽可能分开(方差最大化) 以上两种方式得到的主成分分析的推导是等价的,下面从”最大可分析“进行推导PCA的过程。 3.1 向量的表示及基变换 3.1.1 向量的內积 a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ c o s α ( α 为 两 个 向 量 的 夹 角 ) \vec a\cdot\vec b = |\vec a||\vec b|cos\alpha(\alpha为两个向量的夹角) a ⋅ b = ∣ a ∣ ∣ b ∣ c o

矩阵运算

亡梦爱人 提交于 2019-12-23 11:21:45
二、 矩阵运算 1. 什么是矩阵 矩阵就是由多组数据按方形排列的阵列,在 3D 运算中一般为方阵,即 M*N ,且 M=N ,使用矩阵可使计算坐标 3D 坐标变得很方便快捷。下面就是一个矩阵的实例: 看似没什么特殊的,可是后面你可以看到矩阵的魅力,为什么矩阵这么有效,我也不知道,这个由数学家去论述,我们只要可以用就是了。 2. 向量的点乘和叉乘 向量的点乘和叉乘与矩阵一样是数学定义,点乘在矩阵运算中起到很重要的作用,称为内积,叉乘称为外积,通过叉乘运算可以计算出一个向量,该向量垂直于由两个向量构成的平面,该向量也称为该平面的法线。这两个计算方法在 3D 运算中的作用就是向量计算工具。 l 点乘公式 其实就是两个向量的各分量相乘后形成新的向量 l 叉乘公式 Uc=U1* U2 两个向量进行叉乘的矩阵如下: 其中 x1 , y1 , z1 以及 x2 , y2 , z2 分别为向量 U1 和 U2 的分量,设 UC 为叉乘的向量积,其计算公式如下: 3. 三维几何变换矩阵 几何绘图中,常常需要将一个模型从一个位置移动到另一个位置,或者将模型进行缩放旋转,称为几何变换。每个模型都存在一个局部的坐标系,在制作模型的时候是不考虑模型在场景中的具体位置的,模型中的所有顶点的坐标值都相对于局部坐标系,而模型在应用中会发生很多变化,其中大部分情况都是由多种变化复合的结果,这些变化涉及很多复杂的运算

开发中用到的一个快速排序法

北慕城南 提交于 2019-12-23 10:15:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 实际上在,做web开发,比较少遇到使用一些算法之类的,毕竟不是做搜索引擎,也不是写底层(比如写个类似于mysql这样的数据库,里面需要自己实现排序算法),另外,每种语言,比如java,php都或多或少已经封装好排序函数给程序员使用。比如有个共识, 大家做web开发的基本都明白,业务逻辑多比较简单,不是很复杂的业务逻辑。 我们作为web开发的程序员,基本是是web架构,对数据库增删查改数据,然后把数据展示在页面中,大多就是涉及性能优化,缓存等等。 学学一些常见的算法,对于实现特殊的应用还是有帮助的。比如有些时候我们依赖于数据库中order by来实现排序了,所以非常习惯直接接下交给数据库实现排序了。 接下来,我就遇到需要自己实现排序了。 因为我们在实际开发中,遇到一个问题,完全需要我自己实现排序。需求如下: 在商品表里面,有一个字段是goods_price(商品价格),现在要开发一个促销价功能。促销价有个时间范围设置。在前台页面中,展示商品的时候。如果当前时间符合促销时间。就要按照促销价格执行。于是促销价就单独增加了一个字段来保存,叫做promote_price,促销时间配置信息比如什么时间,每天几点到几点之类的时间设置信息暂时不管,存储在其他字段中的,展示的时候,要用当前时间跟配置的时间进行比较。

PCA

∥☆過路亽.° 提交于 2019-12-23 08:30:17
1.原理:https://blog.csdn.net/program_developer/article/details/80632779 PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。 PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中, 第一个新坐标轴 选择是原始数据中 方差最大的方向 , 第二个新坐标轴 选取是 与第一个坐标轴正交的平面中使得方差最大 的, 第三个轴是与第1,2个轴正交的平面中方差最大的 。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现, 大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0 。于是,我们可以忽略余下的坐标轴, 只保留前面k个含有绝大部分方差的坐标轴 。 这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。 如何得到这些包含最大差异性的主成分方向呢? 通过 计算数据矩阵的协方差矩阵 ,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。 得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵

二维数组中查找数

余生长醉 提交于 2019-12-23 05:57:56
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 1.暴力法 通过循环遍历二维数组,用数组中的每一个元素跟目标target进行比较,相同则返回true;否则返回false。时间复杂度:O(n^2) 2.左下角或右上角 由于二维数组是有序的,一行的最左边是最小的,一列的最下面是最大的。因此我们从左下角(右上角)开始查找,以左下角为例(初始时i=行数-1,j=0)有三种情况: (1)arr[i][j] < target,由于元素已经是一列的最下面,但仍然不够,因此只能右移,即j++ (2)arr[i][j] > target,由于元素已经是一行的最左边,但仍然太大,因此只能上移,即i- - (2)arr[i][j] == target,找到目标,直接返回即可 时间复杂度:O(行+列) 代码: public class Solution { //左下角查找法则 public boolean Find ( int target , int [ ] [ ] array ) { int row = array . length ; int col = array [ 0 ] . length ; int i = row - 1 ;

线性判别分析(Linear Discriminant Analysis)(一)

删除回忆录丶 提交于 2019-12-23 05:17:05
1. 问题 之前我们讨论的PCA、ICA也好,对样本数据来言,可以是没有类别标签y的。回想我们做回归时,如果特征太多,那么会产生不相关特征引入、过度拟合等问题。我们可以使用PCA来降维,但PCA没有将类别标签考虑进去,属于无监督的。 比如回到上次提出的文档中含有“learn”和“study”的问题,使用PCA后,也许可以将这两个特征合并为一个,降了维度。但假设我们的类别标签y是判断这篇文章的topic是不是有关学习方面的。那么这两个特征对y几乎没什么影响,完全可以去除。 再举一个例子,假设我们对一张100*100像素的图片做人脸识别,每个像素是一个特征,那么会有10000个特征,而对应的类别标签y仅仅是0/1值,1代表是人脸。这么多特征不仅训练复杂,而且不必要特征对结果会带来不可预知的影响,但我们想得到降维后的一些最佳特征(与y关系最密切的),怎么办呢? 2. 线性判别分析(二类情况) 回顾我们之前的logistic回归方法,给定m个n维特征的训练样例 (i从1到m),每个 对应一个类标签 。我们就是要学习出参数 ,使得 (g是sigmoid函数)。 现在只考虑二值分类情况,也就是y=1或者y=0。 为了方便表示,我们先换符号重新定义问题,给定特征为d维的N个样例, ,其中有 个样例属于类别 ,另外 个样例属于类别 。 现在我们觉得原始特征数太多,想将d维特征降到 只有一维