矩阵

矩阵的转置、逆与伴随运算的运算规律

耗尽温柔 提交于 2020-02-18 21:35:33
矩阵的转置、逆与伴随运算的运算规律有很大的相似之处,但也有不同,我将矩阵的转置、逆与伴随运算的运算规律总结如下。 另外,对一个矩阵进行多次转置、逆与伴随运算时,其结果与转置、逆与伴随运算的运算顺序无关。 来源: https://www.cnblogs.com/cloneycs/p/12328123.html

4. 二维数组中的查找(剑指 Offer 题解Java版)

半世苍凉 提交于 2020-02-18 14:12:21
文章目录 4. 二维数组中的查找 题目链接 题目描述 解题思路 4. 二维数组中的查找 题目链接 牛客网 题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 Consider the following matrix : [ [ 1 , 4 , 7 , 11 , 15 ] , [ 2 , 5 , 8 , 12 , 19 ] , [ 3 , 6 , 9 , 16 , 22 ] , [ 10 , 13 , 14 , 17 , 24 ] , [ 18 , 21 , 23 , 26 , 30 ] ] Given target = 5 , return true . Given target = 20 , return false . Copy to clipboardErrorCopied 解题思路 要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。 该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前元素的查找区间为左下角的所有元素。 package 二维数组中的查找 ; /* 作者 :XiangLin 创建时间 :18/02/2020 11:51 文件 :FindTarget

1. CNN卷积网络-初识

青春壹個敷衍的年華 提交于 2020-02-18 10:56:34
1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面, 它的神经元间的连接是非全连接的, 同一层中某些神经元之间的连接的权重是共享的(即相同的)。 它的非全连接和权值共享的网络结构使之更类似于生物 神经网络,降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量。 2. CNN卷积网络结构 我们先重整体的角度观察一下CNN卷积网络的结构: 上图的结构从左到右是,输入层、卷积层(Convolution Layer)、池化层(Pooling layer)、卷积层、池化层、全连接层(Fully Connected Layer)、全链接层、输出层。 卷积层+池化层的组合可以在隐藏层出现很多次,上图中出现两次。而实际上这个次数是根据模型的需要而来的。当然我们也可以灵活使用使用卷积层+卷积层,或者卷积层+卷积层+池化层的组合,这些在构建模型的时候没有限制。但是最常见的CNN都是若干卷积层+池化层的组合,如上图中的CNN结构。 在若干卷积层+池化层后面是全连接层(Fully Connected Layer, 简称FC),全连接层其实就是我们前面讲的DNN结构,只是输出层使用了Softmax激活函数来做图像识别的分类,这点我们在DNN中也有讲述

C++动态分配二维数组

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-18 07:25:56
在做矩阵处理时经常会出现二维数组的分配问题,今天实现了一个类可以实现矩阵的动态分配即二维数组的动态分配 class Mat { public : Mat ( int w , int h ) { with = w ; hight = h ; //为二维数组分配空间 mat = new int * [ hight ] ; for ( int i = 0 ; i < hight ; i ++ ) mat [ i ] = new int [ with ] ; } ~ Mat ( ) { //使用完成后释放二维数组的内存空间 for ( int i = 0 ; i < hight ; i ++ ) delete mat [ i ] ; delete mat ; } int getElem ( int x , int y ) { return mat [ y ] [ x ] ; } void setElem ( int x , int y , int elem ) { mat [ y ] [ x ] = elem ; } private : int with ; int hight ; int * * mat ; } 在上面的例子中的构造函数中给出了动态分配二维数组的方法,在析构函数中给出了释放二维数组的方法。 来源: CSDN 作者: 难波万 链接: https://blog.csdn

opencv矩阵运算(二)

和自甴很熟 提交于 2020-02-17 19:07:34
显式创建Mat矩阵的七种方法 1.使用Mat()构造方法创建 //参数:行数,列数,数据类型及通道数,每块的数据 //数据类型及通道数:CV_[位数][是否有符号][数据类型]C[通道数] Mat m(288,288,CV_8UC3,Scalar(0,0,255)); 2.多维度的使用Mat()构造方法创建 创建三维的矩阵,设置每个维度的尺寸 int s[3]={2,2,2}; Mat m1(3,s,CV_8UC3,Scalar(0,0,255)); 3.create函数创建 Mat m2; m2.create(2,2,CV_8UC(2));    来源: https://www.cnblogs.com/navysummer/p/12323018.html

线代自学笔记

陌路散爱 提交于 2020-02-17 18:42:30
QwQ……不知不觉这么久没写过博客了 感觉自己线代好菜啊……准备这些天去听听 吉尔伯特爷爷的公开课 ,好好自学一下 大概看了看时间安排,感觉一天两节课正好够 为了方便督促自己,每天把笔记贴在这里好了 1.方程组的几何解释 每一个 \(n\) 元线性方程组都可以用矩阵表示。除此之外还可以对方程组做以下解释: 行图像:每个方程的解都可以表示为 \(n\) 维空间内的一个超平面,所有超平面的交就是整个方程组的解。 (对于系数矩阵可逆的情况,所有超平面的交应当恰好是一个点。) 列图像:把方程组的每一列都看成一个列向量,那么方程组就可以看成 \(n\) 个列向量线性组合形成对应的常数向量。方程组的解代表每个列向量对应的系数。 在不考虑求解方程组时,列图像的思考方向还会产生另一个问题:列向量的所有线性组合能否充满整个 \(n\) 维空间? 求解方程组的系统方法:消元法 2.矩阵消元 对于方程组 \(Ax=b\) ,可以用一系列初等变换将 \(A\) 变为上三角矩阵 \(U\) ,之后直接倒序回代即可得到整个方程组的解。通常称为高斯消元(Gauss Elimination)。 主元(pivot)不能为0。为了找到主元,可能还需要做一些行交换。 行列式等于主元之积 如果某一次无法找到任何主元,则说明此方程组无解或解不唯一,同时也说明 \(A\) 是奇异矩阵。

矩阵乘法

一曲冷凌霜 提交于 2020-02-17 16:13:25
问题描述   有n个矩阵,大小分别为a0 a1, a1 a2, a2 a3, …, a[n-1] a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。   两个大小分别为p q和q r的矩阵相乘时的运算次数计为p q r。 输入格式   输入的第一行包含一个整数n,表示矩阵的个数。   第二行包含n+1个数,表示给定的矩阵。 输出格式   输出一个整数,表示最少的运算次数。 样例输入 3 1 10 5 20 样例输出 150 数据规模和约定   1<=n<=1000, 1<=ai<=10000。 # include <stdio.h> # include <string.h> # define INF (911111111111111111) long long min ( long long , long long ) ; long long solve ( int , int , int n , long long [ ] [ 2 ] , long long [ ] [ 1000 + 1 ] ) ; int main ( void ) { int n , i , j ; scanf ( "%d" , & n ) ; long long sz [ n + 2 ] [ 2 ] ; for ( i = 1 ; i <= n + 1 ; i ++ ) { scanf (

python机器学习:推荐系统实现(以矩阵分解来协同过滤)

我们两清 提交于 2020-02-17 15:21:28
原文链接: http://tecdat.cn/?p=10911 用户和产品的潜在特征编写推荐系统矩阵分解工作原理使用潜在表征来找到类似的产品。 1. 用户和产品的潜在特征 我们可以通过为每个用户和每部电影分配属性,然后将它们相乘并合并结果来估计用户喜欢电影的程度。 ​ 相同的计算可以表示为矩阵乘法问题。首先,我们把用户属性放在一个名为U的矩阵中,在这个例子中是5,-2,1,-5和5。然后,我们把电影属性放在一个名为M的矩阵中,我们使用矩阵乘法来找出用户的评分。 ​ 但要做到这一点,我们必须已经知道用户属性和电影属性。为每个用户和每部电影提供属性评级并不容易。我们需要找到一种自动的方法。我们来看看电影评分矩阵, ​ 它显示了我们数据集中的所有用户如何评价电影。这个矩阵非常稀疏,但它给了我们很多信息。例如,我们知道用户ID2给电影1号五颗星。所以,基于此,我们可以猜测,这个用户的属性可能类似于电影的属性,因为它们匹配的很好。换句话说,我们有一些线索可以使用。 让我们看看我们如何利用这些线索来了解每部电影和每个用户。在我们刚刚看到的等式中,U乘M等于电影等级,我们已经知道一些用户的实际电影等级。我们已经拥有的电影评分矩阵是我们方程式的解决方案。虽然它是解决方案的一部分,但是这个阵列仍然有很多漏洞,但对于我们来说,这已经足够了。 ​ 实际上,我们可以使用目前为止我们所知道的电影评级

Java数组

柔情痞子 提交于 2020-02-17 08:05:49
1.Java中的数组   数组是一种引用类型。数组用于存放一组数据类型统一的数据。 1.1.一维数组   定义一个数组:     数据类型[] 数组名称;   动态初始化:     数据类型[] 数组名称 = new 数组类型[数组长度]; 1 int[] javaCore = new int[74];   静态初始化:     数据类型[] 数组名称 = new 数组类型[]{元素1,元素2,...};   静态初始化(简化格式,常选择这样初始化数组):     数据类型[] 数组名称 = {元素1,元素2,...}; 1 double[] salary = new double[] {3500.0, 5500.0, 7000.0}; 2 double[] salary = {3500.0, 5500.0, 7000.0}; //简便格式   数组的长度:属性length 1 int[] ar = { 3, 2, 45, 455, 4, 45, }; 2 System.out.println(ar.length);    注意 :     一旦数组被创建,数组的长度就不能发生改变。 1.2.二维数组   二维数组,就是元素为一维数组的数组。   定义格式:     A.数据类型[][] 数组名; (推荐方式)     B.数据类型 数组名[][];     C.数据类型[]

Java day 4

那年仲夏 提交于 2020-02-17 07:48:16
1、随机数(Random:无参构造方法,用于生成随机数)使用步骤(和Scanner类似): (1)导包:import java.util.Random(); (2)创建对象:Random r=new Random(); (3)获取随机数:int number=r.nextInt(10) ;[注意:产生的随机数包括0不包括10] 2、数组:存储同一种数据类型的多个元素的容器 # 定义格式:(1)数据类型[ ] 数组名(常用);(2)数据类型 数组名[ ](很少用) 举例:a、int[ ] arr;定义了一个int类型的数组,数组名是arr; b、int arr[ ];定义了一个int类型的变量,变量名是arr数组 # 数据初始化(为数据开辟内存空间,并为数组中的每个元素赋予初值): (1)动态初始化(只给出长度,由系统给出初始化值):数据类型[ ] 数组名=new 数据类型 [ 数组长度]; (2)静态初始化(给出初始化值,由系统决定长度):数据类型[ ] 数组名=new 数据类型[ ]{元素1,元素2,元素3,...} (简化格式:数据类型[ ] 数组名=new {元素1, 元素2,元素3,...}) 3、Java中的内存分配: (1)栈:存储的是局部变量(定义在方法中的变量),使用完毕,立即回收; (2)堆:存储的是new出来的东西(实体,对象),每一个对象都有地址值