矩阵

Eigen入门之密集矩阵 3 - Array操作

最后都变了- 提交于 2020-02-20 08:16:24
简介 在Eigen内,有Matrix,vector进行线性代数的相关运算,但也需要执行对矩阵内的系数的相关操作时,这是正常的功能需求。Eigen中的Array类就是满足此需求的。 Array 定义 和前面介绍的Matrix和Vector类似,Array类也是一个模板类 /** \class Array * \ingroup Core_Module * * \brief General-purpose arrays with easy API for coefficient-wise operations * * The %Array class is very similar to the Matrix class. It provides * general-purpose one- and two-dimensional arrays. The difference between the * %Array and the %Matrix class is primarily in the API: the API for the * %Array class provides easy access to coefficient-wise operations, while the * API for the %Matrix class provides easy

Python练习——矩阵运算

孤人 提交于 2020-02-20 05:42:06
Python练习——矩阵运算 给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。 输入格式: 输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。 输出格式: 在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。 输入样例: 4 2 3 4 1 5 6 1 1 7 1 8 1 1 1 1 1 输出样例: 35 分析: 根据题意可推导出: 在副对角线上的点:i+j=n-1 在最后一列上的点:j=n-1 在最后一行上的点:i=n-1 所以只要不满足上述条件即可。 n = int ( input ( ) ) a = [ ] for i in range ( n ) : l = list ( map ( int , input ( ) . split ( ) ) ) a . append ( l ) sum = 0 for i in range ( n ) : for j in range ( n ) : if i + j != n - 1 and i != n - 1 and j != n - 1 : sum += a [ i ] [ j ] print ( sum ) 来源: CSDN 作者: linjiayina 链接: https://blog.csdn

2020-02-19

孤街醉人 提交于 2020-02-19 23:18:07
卷积神经网络(conv)架构 卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的问题。 1.全连接神经网络和卷积神经网络的区别全连接神经网络: 在这里插入图片描述卷积神经网络图: 在这里插入图片描述共同点: 每一个节点都代表一个神经元,没相邻两层之间的节点都有边相;输入输出的流程基本一致。 不同点: 卷积神经网络相邻两层之间只有部分的节点相连,所以一般会将每一层的卷积层组织成一个三维矩阵。卷积神经网络的优点: 在图像处理方面,对于MNIST数据,每一张图片的大小是28281,其中28*28为图片的大小,1表示只有一个彩色通道,并且这里的图像的颜色为黑白。假设第一层隐藏层的节点数位500个,那么一个全连接层的神经网络将有28 * 28 * 500+500=392500个参数。其中**+500 表示的是basic值。而当图片更大的时候,通道数增加的的时候,所需要的参数的数量会更大,会达到百万级,甚至千万级。随着参数的增多,计算速度会随之减慢,还容易导致过度拟合问题。 2.卷积神经网络卷积神经网络构架图:在这里插入图片描述 1.输入层在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。通常为(length * width *channel)。

矩阵键盘的检测

心不动则不痛 提交于 2020-02-19 10:14:27
由于矩阵键盘中每一个按键的两个接线口都是接在IO口上的,所以我们就必须在软件里面控制单片机在每个独立按键的两端加上不同的电平。 从上面的原理图中可以看出 P1 口的高四位控制 行,低四位控制列;所以我们就可以写 P1 = 0X0F 或者写 P1 = 0XF0,这样就实现了在每一个独立按键两端加上不同的电平。 代码编写流程和独立按键一样,第一步要先检测到按键按下,根据上面的原理图,矩阵键盘检测按键是否按下只要给 P1 口赋值 0X0F,然后检测 P1 口的值是否还是 0X0F即可。 之后就要消除抖动,消除抖动的方法还是一样,延时一段时间即可: MatrixKeyValue=0xf0; if(MatrixKeyValue != 0xf0)  //检测是否有按键按下 {   delay(10);   if(MatrixKeyValue != 0xf0)   {   } } 判断到底是哪个按键按下的思路有两种: 1、逐行扫描 逐行扫描就是说先扫描第一行中的哪个按键按下了,如果没有再扫描第二行,看一下是不是第二行里的某个按键按下了,如果还没有找到按下的那个按键,那么就继续扫描第三行、第四行,知道找出哪个按键被按下了。这个代码实现比较简单,而且这种扫描方法不怎么常用,效率不高,所以这里我就不写了。 2、行列扫描 行列扫描就是说先扫描所有的行,确定是哪一行的按键被按下了,之后再扫描所有的列

入门——最短路(floyd, dijkstra)

冷暖自知 提交于 2020-02-19 09:16:22
今天讲图论基础和两种最短路算法。 老实说,我不觉的我能把最短路讲好,因为我主功不是图论,好久没有用了。本来只想找几篇博客放这里,但是发现现在的博客鱼龙混杂,感觉自己更应该讲好了。。。 首先要对图论有个大概的了解,尽管是刚入门,但是为了以后的学习还是要知道图论的基础名词的,我不是科班出身只能引用大佬的博客: https://blog.csdn.net/saltriver/article/details/54428685?utm_source=distribute.pc_relevant.none-task 。 了解了正统的图论以后,那么现在你只需要记住今天算法的应用范围就行:带有权的连通图,换句话说就是有很多点,这些点都有路能串起来并且这些路或者点是有数据的。我们今天讲的最短路算法就主要计算任意两点间的最短距离。最短路的算法有很多,常用的就有四个,分别是Floyd、dijkstra、bf 和spfa,在这里我们只学floyd和dijkstra,因为这两种算法的思想不仅能用在最短路上,在其他的时候也能用来偷分。另外两种算法选学,在处理特别复杂的图问题的时候,这两种算法因为更优的复杂度还是有很高的使用率的,不过学习的成本有点高,不适合初学。 零、存图 进行图论算法的第一步,就是把图存起来。存图的两种方式为邻接矩阵和邻接表。 邻接矩阵是建立一个二维数组,大小为所有点的数量+5

LeetCode 240 - 搜索二维矩阵 II

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-19 07:53:37
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 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] ] 给定 target = 5,返回 true。 给定 target = 20,返回 false。 初始坐标 $(i,j)$ 设定为最右上角,如果 $target<mat[i][j]$,那么坐标往左平移一格,因为这一列上的数字都大于 $target$;如果 $target>mat[i][j]$,则坐标往下平移一格,因为这一行上的数字都小于 $target$。 AC代码: class Solution { public: bool searchMatrix(const vector<vector<int>>& mat,int x) { if(mat.empty()) return 0; int i=0, j=mat[0].size()-1; while(i<mat.size() && j>=0) { if(x==mat[i][j]) return 1; else if(x

二维数组中的查找

假装没事ソ 提交于 2020-02-19 05:49:05
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 class Solution : # array 二维列表 def Find ( self , target , array ) : # write code here rows = len ( array ) - 1 cols = len ( array [ 0 ] ) - 1 i = rows j = 0 while j <= cols and i >= 0 : if target < array [ i ] [ j ] : i -= 1 elif target > array [ i ] [ j ] : j += 1 else : return True return False 从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。 表示形式中 列表list是没有shape属性的,需要将其转换为数组 import numpy as np array = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] a = len ( array

最优化理论实践——神经网络训练

徘徊边缘 提交于 2020-02-19 04:13:47
无约束优化实践 训练一个神经网络 优化理论实践 用了一周的时间学习了一下最优化理论这门课,为了更深度地理解各种优化方法的理念和算法过程,自己把这些算法应用到实践中是很必要的。为此我设计了和优化算法相关的四个实验项目,在这里和大家分享一下。 无约束优化方法 前馈神经网络 根据链式法则,从输出层直接对误差函数求导得到的误差(这里我们简写为δ),就可以通过和上面的这些局部导数不断做乘积、并把新的δ传播到上一层,就能计算得到所有参数的导数。通过一阶导数,就能实现基本的梯度优化方法。 训练方法 神经网络可以很好地处理函数拟合问题,因为模型带有大量可调节的参数,而且内置了非线性的激励函数,这就让神经网络实现各种函数的拟合成为可能。 前面已经说到,全连接神经网络(前馈神经网络)的前向传播和反向传播都可以写成简单的矩阵与矩阵相乘,矩阵和常数相乘,矩阵和常数相加的形式。只要按照上面的公式实现矩阵运算,就可以搭建一个自己的神经网络了。 我们这里将要实现的是函数拟合,训练的过程可以理解为是让神经网络输出与真实函数值相差最小的过程,因此使用均方误差MSE进行训练。 均方误差是二次型函数,显然是凸函数。神经网络内的参数w和b都没有约束条件,即训练神经网络的问题是一个无约束凸优化问题。 算法的选择是要经过考虑的。首先,神经网络内参数的导数容易从反向传播算法得到,但是二阶导数不是那么容易计算

静态方法,Arrays类,二维数组

旧街凉风 提交于 2020-02-19 03:17:27
一、静态方法 静态方法属于类的,可以直接使用类名.方法名()调用。 静态方法的声明 访问修饰符 static 类型 方法名(参数列表) { //方法体 } 方法的作用:一个程序分解成几个方法,有利于快速调试程序,也有利于提高程序代码的利用率。因为方法是可以多次被调用的,调用次数和调用场合没有限制。 方法分类:①返回值为(空)void的方法②带具体返回类型的方法③不带参数的方法④带参数的方法 方法的返回值:如果方法中有返回值,方法中必须使用关键字return返回该值,返回值类型为该方法所定义的返回值类型。 ①不带返回值的方法 1 public class BubbleSort{ 2 public static void main(String []argas) 3 { 4 int[] array={80,53,12,90,35,22,65,45,82,33}; 5 bubble(array); 6 print(array); 7 } 8 9 //冒泡方法 10 public static void bubble(int[] array) 11 { 12 //N个数比较的轮数为N-1次 13 for(int i=0;i<array.length-1;i++) 14 { 15 //每一轮比较的次数为N-1-i次 16 for(int j=0;j<array.length-i-1;j++)

200223题(18vivo)

怎甘沉沦 提交于 2020-02-19 02:43:15
Longest Common Substring问题:有两个字符串str和str2,求出两个字符串中最长公共子串长度。 比如:str1=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最长公共子串长度为5。 算法思路: 1、把两个字符串分别以行和列组成一个二维矩阵。 2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。 3、通过查找出值为1的最长对角线就能找到最长公共子串。 针对于上面的两个字符串我们可以得到的二维矩阵如下: 从上图可以看到,str1和str2共有5个公共子串,但最长的公共子串长度为5。 为了进一步优化算法的效率,我们可以再计算某个二维矩阵的值的时候顺便计算出来当前最长的公共子串的长度,即某个二维矩阵元素的值由record[i][j]=1演变为record[i][j]=1 +record[i-1][j-1],这样就避免了后续查找对角线长度的操作了。修改后的二维矩阵如下: 代码如下: # include <iostream> # include <string> # include <vector> # include <algorithm> using namespace std ; string getLCS ( string str1 , string str2 ) { vector <