矩阵

二维数组

前提是你 提交于 2020-01-11 05:42:32
二维数组 其实二维数组其实就是一个元素为一维数组的数组。 动态初始化方式一(指定有多少个长度相同的一维数组) 数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维数组 n表示每一个一维数组的元素个数 动态初始化方式二(指定二维数组中有多少个一维数组,每一个一维数组的长度不固定) 数据类型[][] 变量名 = new 数据类型[m][]; 注意: m这个数据必须给出,后面的数据可以不给,如arr[2][0]); 求:定义一个有3个一维数组的二维数组 1.给这个二维数组的每一个一维数组的元素赋值 仅可用此种方式: arr[0] = new int[2]; arr[0][0] = 1; arr[0][1] = 2; 不能用此种方式: arr[0] = {1,2}; arr[1] = {5,6,7}; arr[2] = {4}; 二维数组的静态初始化: 静态初始化: 数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}}; 简化格式: 数据类型[][] 变量名 = {{元素…},{元素…},{元素…}}; int [ ] [ ] arr2 = { { 1 , 2 } , { 3 , 4 , 5 } , { 6 , 7 , 8 , 9 } } ; 二维数组的遍历: public class TwoDemo {

二维数组的查找 剑指offer

淺唱寂寞╮ 提交于 2020-01-11 04:07:16
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入描述: array: 待查找的二维数组 target:查找的数字 输出描述: 查找到返回true,查找不到返回false bool Find(vector<vector<int> > array,int target) { bool found = false; int rows = array.size(); int columns = array[0].size(); if(!array.empty() && rows > 0 && columns > 0){ int row=0; int column = columns-1; while(row < rows && column >= 0){ if(array[row][column] == target){ found = true; break; } else if(array[row][column] > target) --column; else ++row; } } return found; } 来源: https://www.cnblogs.com/gaobaoru-articles/p/5235248.html

SVD分解理论

谁都会走 提交于 2020-01-11 03:58:47
## 矩阵SVD分解的理论基础 首先,我们先说明什么是矩阵的奇异值分解(single value decomposition),简称SVD。 给定一个矩阵 A ∈ R m × n A \in R^{m \times n} A ∈ R m × n , 设它的秩为r,则它具有以下的分解形式 A m × n = U m × m Σ m × n V n × n T A_{m \times n} = U_{m \times m} \Sigma_{m \times n} V_{n \times n}^T A m × n ​ = U m × m ​ Σ m × n ​ V n × n T ​ 其中,U是正交矩阵,其列向量是 A A T AA^T A A T 的单位特征向量,V 也是正交矩阵,其列向量是对应的 A T A A^TA A T A 的单位特征向量, Σ \Sigma Σ 具有下述的形式 Σ = ( Σ 1 O O O ) \Sigma = \left( \begin{array}{cc} \Sigma_1 & O \\ O & O\end{array} \right) Σ = ( Σ 1 ​ O ​ O O ​ ) 且 Σ 1 = d i a g ( σ 1 , σ 2 , … , σ r ) \Sigma_1 = diag(\sigma_1,\sigma_2,\ldots,

剑指offer-二维数组中的查找

独自空忆成欢 提交于 2020-01-11 03:58:26
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 时间限制:1秒 空间限制:32768K 热度指数:29783 我的方法:从数组每行第一个元素开始判断是否小于或等于目标值,若是就遍历该行 难点备注:二维数组判断的条件 1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 4 boolean flag=false; 5 6 if(array==null||array.length==0||(array.length==1&&array[0].length==0)){ 7 return flag; 8 } 9 10 for(int i=0;!flag&i<array.length;i++){ 11 if(target>=array[i][0]){ 12 for(int j=0;j<array[i].length;j++){ 13 if(array[i][j]==target){ 14 flag=true;break; 15 } 16 } 17 } 18 } 19 20 return flag; 21 } 22 } 优秀解法: /* 思路矩阵是有序的

C++中动态申请二维数组并释放方法

蓝咒 提交于 2020-01-11 02:57:02
C/C++中动态开辟一维、二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下。 C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/delete (3)STL容器中的vector 下面逐一介绍: 第一种:malloc/free 1.动态开辟一维数组 //动态开辟一维数组 void dynamicCreate1Array() { int m; int i; int *p; printf("请输入开辟的数组长度:"); scanf("%d",&m); p = (int*)malloc(sizeof(int)*m);//动态开辟 printf("请输入数据:"); for(i = 0; i < m ; i++) scanf("%d",&p[i]); printf("输出数据:\n"); for(i = 0; i < m; i++) printf("%d ",p[i]); free(p); } 运行结果: 2.动态开辟二维数组 //动态开辟二维数组 void dynamicCreate2Array() { int m,n; int i,j; int **p; printf("请输入数组行和列:"); scanf("%d%d",&m,&n); p = (int**)malloc(sizeof(int*)*m); //开辟行

二维数组

陌路散爱 提交于 2020-01-11 00:15:22
题目: 返回一个二维整数数组中最大子数组的和。 要求: 1. 输入一个二维整形数组,数组里有正数也有负数。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 2.程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是: 数组的行数, 数组的列数, 每一行的元素, (用逗号分开) 每一个数字都是有符号32位整数,当然,行数和列数都是正整数。 思路: 这道题自己没有什么思路最开始做的时候,于是从网上借鉴了一个,然后基本了解了这样一个大概思路: 矩阵中的数可能正有负,所以要首先判断二维数组中哪些位置上的数是正数,利用另一个二维数组记录正数的位置,然后判断哪些数是连通的,计算每个连通块的数值的和,然后再连通不同的块,计算其和,最后比较其中的最大值,即为二维整数数组中最大连通子数组的和。 来源: https://www.cnblogs.com/zzstdruan1707-4/p/11070184.html

【Matlab】PCA降维实现人脸识别(附学习资料、代码程序及注解、运行结果)

北城余情 提交于 2020-01-11 00:01:46
Matlab实现PCA人脸识别 寒假来了,阿汪先生总结了这一学期里学到的一些东西,并来和大家分享一下。 一、理论知识基础 1、一些前辈的经验分享(不局限于这些) (1) PCA人脸识别详解——初学者必看 . (2) 理解主成分分析 (PCA) . (3) LLE算法 . (4) 拉格朗日乘子法 . 2、阿汪先生做的一些笔记和用到的资料 原理资料上讲的很好,阿汪做了一些批注。水平不够,大家见谅呀!^-^ (1) 05-人脸图像超分辨率重建 . (2) 6.5-基于K-L变换的特征提取 . (3) Matlab_PCA_图像降维和人脸匹配_笔记 . 主要用到的资料: 人脸识别与人体动作识别技术及应用 [专著] / 曹林著.——北京:电子工业出版社,2015.8,ISBN:978-7-121-26660-7. 模式识别及MATLAB实现 [专著] / 杨杰主编.——北京:电子工业出版社,2017.8,ISBN:978-7-121-32127-6. 二、注解代码程序 1、重塑训练数据-T() function T = CreateDatabase(TrainDatabasePath) %此函数重塑训练数据库的所有2D图像放入一维列向量中。 %然后,将这些一维列向量放在一行中构造2D矩阵“ T”。 %一个2D矩阵,包含所有1D图像矢量。 %假设训练数据库中的所有P图像的MxN大小相同。

二维数组--求最大组数组和

左心房为你撑大大i 提交于 2020-01-10 23:56:35
题目: 程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是 : 数组的行数 , 数组的列数 , 每一行的元素, ( 用逗号分开 ) 每一个数字都是有符号 32 位整数,当然,行数和列数都是正整数。 设计思想: 自己的设计思路是,相邻两行进行加和,给出一个新的数组存储行加和值;然后相邻两列加和,新数组存储列加和值;找出行加和以及列加和最大值,确定中心范围区域,输出行、列第一个值(及中心范围中左上角的值)的数组下标,然后扩大区域,找出最大子数组和的最大值。 但是,自己的设计思路,并没有实现,后询问同学,网上查找,找了一种新的设计思路,利用两层循环,实现题目。 源代码: package test02; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ErWei { public static void main(String[] args) throws IOException { //构造二维数组 Integer c[][]= { {5,-7,8,6}, {36,-9,-8,25}, {-7,8,6,5} }; //求和 List<List<Integer>> main

数组、二维数组定义、应用、遍历

断了今生、忘了曾经 提交于 2020-01-10 23:55:53
数组定义 数据类型[] 数组名 = new 数据类型[元素个数或数组长度]; int [ ] x = new int [100] int [ ] x; //声明一个int [ ]类型的变量 x = new int [100]; //创建长度为100的数组 定义数组访问数组元素 1 public class ArrayDemo01 { 2 public static void main(String[] args) { 3 int[] arr; // 声明变量 4 arr = new int[3]; // 创建数组对象 5 System.out.println("arr[0]=" + arr[0]); // 访问数组中的第一个元素 6 System.out.println("arr[1]=" + arr[1]); // 访问数组中的第二个元素 7 System.out.println("arr[2]=" + arr[2]); // 访问数组中的第三个元素 8 System.out.println("数组的长度是:" + arr.length); // 打印数组长度 9 } 10 } 结果: 为数组元素赋值 1 public class ArrayDemo02 { 2 public static void main(String[] args) { 3 int[] arr = new

个人作业3 二维数组

好久不见. 提交于 2020-01-10 23:55:37
格式: 数组的行数, 数组的列数, 每一行的元素, 每一个数字都是有符号32位整数,行数和列数都是正整数。 package shuzu; public class shuzuu{ public static void main(String[] args) { int matrix[][]={{1,-2,3},{-4,5,6},{-7,8,-9}}; maxSum(matrix); } public static void maxSum(int matrix[][]) { if(matrix==null||matrix.length==0) return; int max=0; int col=matrix[0].length,row=matrix.length; for(int i=0;i<row;i++) { int arr[]=new int[col]; for(int j=i;j<row;j++) { for(int k=0;k<col;k++) { arr[k]+=matrix[j][k]; } for(int l=0;l<col;l++) { System.out.print(arr[l]+" "); if((l+1)%3==0) { System.out.println(); } } max=Math.max(max(arr), max); System.out