矩阵

leetcode_59_螺旋矩阵II

让人想犯罪 __ 提交于 2020-03-02 11:23:57
螺旋矩阵II 描述 中等 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 解题 第54题 是有一个二维矩阵,螺旋取出其值,这一题反了一下而已,往矩阵填数字,而且还是方阵 可以看作一圈一圈从外圈到内圈填数字 class Solution : def generateMatrix ( self , n : int ) - > List [ List [ int ] ] : result = [ [ 0 for i in range ( n ) ] for j in range ( n ) ] count = 1 j = 0 # 螺旋矩阵一圈一圈的第几圈 while count <= n * n : # 从左往右 for i in range ( j , n - j ) : result [ j ] [ i ] = count count += 1 # 从上往下 for i in range ( j + 1 , n - j ) : result [ i ] [ n - j - 1 ] = count count += 1 # 从右往左 for i in range ( n - j - 2 , j - 1 , - 1 ) :

C语言学习笔记(八)--数组

若如初见. 提交于 2020-03-02 06:40:39
1 数组 在程序设计过程中我们往往需要处理一批相同类型的数据,如果使用基本类型定义变量来储存,显然是不方便的,这是我们就需要使用数组了。 2 数组特点 1.数组大小必须是确定的,不能随机改变的。 2.数组的元素必须是相同类型的,不允许出现混合类型。 3 一维数组 3.1 一维数组的定义: 类型说明符 数组名 [ 常量表达式 ] ; 例如: int a[10] 数组的生命需要注意以下几个问题: 1.数组的命名规则与变量相同; 2.常量表达式代表的是数组元素的个数,也就是数组的长度; 3.数组的下标是从 0 开始的,最后一个元素的下标是数组长度减 1 ; 4.数组的定义可以和普通变量一起声明和定义 Float i,j[]; 3.2 一维数组的引用:数组名 [ 下标表达式 ]; 例如: int a[5]; a[3]=10; 其中下标表达式可以是任意类型的表达式,但值必须是非负整型的。 数组分配内存空间是连续的空间,地址从低地址到高地址。 例子代码: #include "stdio.h" main() { float score[10]; int i; printf("please input scores:\n"); for (i=0;i<10;i++) /*数组下标为0~9*/ scanf("%f",&score[i]); /*依次输入每个数组元素*/ printf("\n");

二维数组作为函数的参数

别来无恙 提交于 2020-03-02 04:23:14
*二维数组作为形参时,必须写明数组有多少列: void PrintArray(int a[][5]) *必须写明 列数 编译器才能根据下标算出元素的地址 a[i][j]的地址: 数组首地址+i乘N乘sizeof(a[0][0])+j乘sizeof(a[0][0]) (N是数组列数)形参数组的首地址就是实参数组的首地址 样例代码1. # include <stdio.h> void print ( int a [ ] [ 3 ] ) ; int main ( ) { int a [ 2 ] [ 3 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; print ( a ) ; return 0 ; } void print ( int a [ ] [ 3 ] ) { printf ( "%d\n" , a [ 0 ] [ 0 ] ) ; } 样例代码2. # include <stdio.h> void print ( int array [ ] , int len ) ; void funct ( int a [ ] [ 10 ] ) ; int main ( ) { int b [ 4 ] [ 10 ] ; for ( int i = 0 ; i < 4 ; i ++ ) for ( int j = 0 ; j < 10 ; j ++ ) scanf ( "%d" ,

opencv中的几种常见的图像数据类型

我的未来我决定 提交于 2020-03-02 04:21:27
1 opencv中的几种常见的图像类型 opencv中,几种常见的图像类型有: IplImage,Mat,CvMat,CvArr CvArr : 老版本的结构了。是一个抽象基类,在函数原型中,常见到CvArr(CvArr*),这就允许吧CvMar* 或者IplImage* 传递到程序或函数参数中了。 CvMat : 矩阵结构, IplImage : 是较老版本的一种类型了,对图像进行”编码“的基本结构。这些图像可能是灰度,彩色,4通道的(RGB+ alpha),其中,每个通道可以包含任意的整数或浮点数。 Mat: 新版本中的强大的一个图像容器,是和Matlab中的函数对应的。 基本上讲 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。矩阵头的尺寸是常数值,但矩阵本身的尺寸会依图像的不同而不同,通常比矩阵头的尺寸大数个数量级。 2 opencv中存储图像类型转换 (1)将IplImage类型转换到Mat类型 Mat::Mat(const IplImage* img, bool copyData=false); 默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后

OpenGL函数库分类(总结得不错)

偶尔善良 提交于 2020-03-02 00:10:33
OpenGL 函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。下面逐一对这些库进行详细介绍。 1.OpenGL核心库 核心库包含有115个函数,函数名的前缀为gl。   这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。   核心库中的函数主要可以分为以下几类函数:   (1)绘制基本几何图元的函数。如绘制图元的函数glBegain()、glEnd()、glNormal*()、glVertex*()。   (2)矩阵操作、几何变换和投影变换的函数。如矩阵入栈函数glPushMatrix()、矩阵出栈函数glPopMatrix()、装载矩阵函数glLoadMatrix()、矩阵相乘函数glMultMatrix(),当前矩阵函数 glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()

[题目3]二维数组中的查找

橙三吉。 提交于 2020-03-01 20:55:34
代码实现: package j2; /** * 二维数组中的查找 * Created by admin on 2019/5/15. */ public class ArrayFind { public static boolean find(int [][]matrix,int rows,int cols,int key){ boolean found = false; //边界判断 if (matrix != null && rows>=0 && cols>=0) { int row = 0; int col = cols-1; while (row < rows && col>0){ if (matrix[row][col] == key) { found = true; break; } else if(matrix[row][col] > key){ col--; } else { row++; } } } return found; } public static void main(String[] args) { int[][]ma = { {1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,15} }; boolean result = find(ma,4,4,5); System.out.println(result); } }

JDK源码阅读-------自学笔记(七)(二维数组的浅析)

微笑、不失礼 提交于 2020-03-01 20:09:27
实际开发中一般最多使用到二维数组,再高很少使用 二维数组很少用,实际开发中会使用容器代替使用 1、创建二维数组 1 // 二维数组初始化 2 int[][] secondDimensional = new int[3][]; View Code 2、二维数组赋值 1 // 二维数组赋值 2 secondDimensional[0] = new int[]{1, 2, 3}; 3 4 secondDimensional[1] = new int[]{1, 2, 3, 4}; View Code 3、二维数组的表格式操作 思考:建立一个一维数组,将一维数组存入到二维数组中,生成表格 注意: 二维数组的[] 内是自动生成的没有数字填 1 // 首行数据 2 Object[] tablesName = {"ID", "姓名", "年龄", "职能", "入职日期"}; 3 4 // 用户数据 5 Object[] userData = {1001, "张三", 22, "教师", "2010-11-21"}; 6 7 // 二维数组初始化 8 Object[][] secondDimensional = new Object[3][]; 9 10 // 存入数据 11 secondDimensional[0] = tablesName; 12 13 secondDimensional[1]

DeepSORT的细节

爱⌒轻易说出口 提交于 2020-03-01 20:06:13
一、整体把握 目标在每帧中的轨迹状态是如何表示的?   作者用8维向量[u,v,r,h,x’,y’,r’,h’]来表示目标所处的轨迹状态, u,v,r,h分别对应目标的中心坐标、r是长宽比、h是高。而x’,y’,r’,h’这四个参数代表目标对应的运动速度(可将其看成前四个参数分别的运动数据)。该轨迹向量同时提供了目标在当前帧的bbox信息以及bbox的运动信息,为预测bbox下一帧可能的位置提供了数据。 轨迹如何具体理解?   可以将轨迹理解成在不同时刻的位置序列[u,v,r,h]。 预测下一帧中目标的bbox是如何做到的?   利用轨迹状态中的参数,用卡尔曼滤波对相应目标预测轨迹。卡尔曼滤波采用的为匀速模型和线性观测模型,其观测变量为u,v,r,h这四个变量。 如何确定轨迹的出现和终止?(轨迹处理的细节)   跟踪目标的实际过程中,会出现旧的目标(已在轨迹池中的目标)走出视野,新的目标进入视野,因此每个轨迹的出现和终止是非常重要的问题。   显而易见,若旧目标丢失就终止其轨迹,那如何确定目标丢失了呢? 作者对轨迹池中的每个目标都增加一个记录其最后一次匹配成功到当前时刻的时长变量a,若a大于最大允许阈值Amax则认为该目标已丢失,需终止。   那新的目标是如何确定并处理的呢?   首先检测器会将所有检测到的目标(仅当前帧通过目标检测网络检测得出,将其称为detection

海森矩阵介绍及其在机器学习、深度学习中的理解

瘦欲@ 提交于 2020-03-01 19:13:21
海森矩阵(Hessian Matrix) Hessian Matrix:二阶导和函数曲率 海森 & 机器学习 特征值、凸性和鞍点 Key Words: Hessian Matrix, second order derivatives, convexity, and saddle points 原文链接: Hessian, second order derivatives, convexity, and saddle points 翻译: Hessian Matrix:二阶导和函数曲率 回忆一下 f f f 的梯度 f : R n → R f:\mathbb{R}^n \rightarrow \mathbb{R} f : R n → R : f ′ ( x ) = [ δ f δ x 1 , δ f δ x 2 , ⋯   , δ f δ x n ] (1) f'(x) = [\frac{\delta f}{\delta x_1}, \frac{\delta f}{\delta x_2}, \cdots, \frac{\delta f}{\delta x_n} ]\tag{1} f ′ ( x ) = [ δ x 1 ​ δ f ​ , δ x 2 ​ δ f ​ , ⋯ , δ x n ​ δ f ​ ] ( 1 ) 求 f f f 的二阶导意味着,我们可以看到第 i i i