矩阵

Eigen(5)-Reductions, visitors and broadcasting(规约、迭代和广播)

六月ゝ 毕业季﹏ 提交于 2019-12-13 12:10:05
规约、迭代、广播 规约 Eigen中规约是指对一个矩阵或数组操作并返回一个标量的函数,常用的是sum()方法,返回矩阵或数组的所有元素的和。 # include <iostream> # include <Eigen/Dense> using namespace std ; int main ( ) { Eigen :: Matrix2d mat ; mat << 1 , 2 , 3 , 4 ; cout << "Here is mat.sum(): " << mat . sum ( ) << endl ; cout << "Here is mat.prod(): " << mat . prod ( ) << endl ; cout << "Here is mat.mean(): " << mat . mean ( ) << endl ; cout << "Here is mat.minCoeff(): " << mat . minCoeff ( ) << endl ; cout << "Here is mat.maxCoeff(): " << mat . maxCoeff ( ) << endl ; cout << "Here is mat.trace(): " << mat . trace ( ) << endl ; } output Here is mat.sum(): 10

奇异值分解SVD

可紊 提交于 2019-12-13 00:45:46
在介绍奇异值分解(SVD)之前我们先来回顾一下关于矩阵的一些基础知识。 矩阵基础知识 方阵 给定一个$ n×m $的矩阵$ A $,若n和m相等也就是矩阵的行和列相等那矩阵$ A $就是一个方阵。 单位矩阵 在线性代数中,n阶单位矩阵,是一个$ n×n $的方阵,其主对角线元素为1,其余元素为0。单位矩阵以$ mathbf { I } _ { n } $表示。 单位矩阵性质: $$ text { 1. } I _ { n } B _ { n times m } = B _ { n times m } $$ $$ text { 2. } B _ { n times m } I _ { m } = B _ { n times m } $$ $$ text { 3. } A _ { n } I _ { n } = I _ { n } A _ { n } = A _ { n } $$ $$ text { 4. } I _ { n } I _ { n } = I _ { n } $$ 转置 矩阵的转置是最简单的一种矩阵变换。简单来说若$ n×m $的矩阵$ A $的转置为$ A ^ { mathrm { T } } $,则$ A ^ { mathrm { T } } $是一个$ m×n $的矩阵并且有$ mathbf { A } _ { i j } = mathbf { A } _ { j

7-2 求矩阵的局部极大值

妖精的绣舞 提交于 2019-12-12 23:04:02
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。 输入格式: 输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。 输出格式: 每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。 输入样例1: 4 5 1 1 1 1 1 1 3 9 3 1 1 5 3 5 1 1 1 1 1 1 输出样例1: 9 2 3 5 3 2 5 3 4 输入样例2: 3 5 1 1 1 1 1 9 3 9 9 1 1 5 3 5 1 输出样例2: None 3 5 #include<stdio.h> int main() { int i,j,n,m,a[20][20],flag=0; scanf("%d %d",&m,&n); for(i=0;i<m;i++) { for(j=0;j<n;j++) scanf("%d",&a[i][j]); } for(i=1;i<m-1;i++) { for(j=1;j<n-1;j++) { if(a[i][j]>a

突然想起忘记写博客了,发点自己作业上的代码来摸摸鱼_(:з」∠)_

不想你离开。 提交于 2019-12-12 22:27:13
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。 输入格式: 输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。 输出格式: 每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。 输入样例1: 4 5 1 1 1 1 1 1 3 9 3 1 1 5 3 5 1 1 1 1 1 1 输出样例1: 9 2 3 5 3 2 5 3 4 输入样例2: 3 5 1 1 1 1 1 9 3 9 9 1 1 5 3 5 1 输出样例2: None 3 5 #include <stdio.h> int main() { int i,j,hang,lie,count=0; scanf("%d %d",&hang,&lie); int a[hang][lie]; for(i=0;i<hang;i++) { for(j=0;j<lie;j++) scanf("%d",&a[i][j]); } for(i=1;i<hang-1;i++) { for(j

剑指offer 第12题

痞子三分冷 提交于 2019-12-12 22:26:13
剑指offer 第12题 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。 bool hasPathCore ( char * matrix , int rows , int cols , bool * visited , int row , int col , char * str , int & pathLength ) { if ( str [ pathLength ] == '\0' ) return true ; bool haspath = false ; if ( row >= 0 && row < rows && col >= 0 && col < cols && matrix [ row * cols + col ] == str [ pathLength ] && visited [ row * cols + col ] == 0 ) { visited [

二维数组

南笙酒味 提交于 2019-12-12 21:12:10
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> typedef struct _Ateacher { int id; char *name; char **stu; }Teacher_t; Teacher_t *createTeacher(int n) { int i = 0, j = 0; Teacher_t *st = NULL; st = (Teacher_t *)malloc(n*sizeof(Teacher_t)); for (i = 0; i < n; i++) { st[i].name = (char *)malloc(100); st[i].stu = (char **) malloc(sizeof(char *)); for (j = 0; j < n; j++) { st[i].stu[j] = (char *)malloc(100); } } return st; } void printst(Teacher_t *st) { int i = 0, j = 0; for( i = 0; i < 3; i++) { printf("Tname: %s, Tid: %d \t ->>> stu info", st[i].name, st[i].id);

1125:矩阵乘法

北城以北 提交于 2019-12-12 12:59:30
【题目描述】 计算两个矩阵的乘法。n×m阶的矩阵A乘以m×k阶的矩阵B得到的矩阵C 是n×k阶的,且C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + …… +A[i][m-1]×B[m-1][j](C[i][j]表示C矩阵中第i行第j列元素)。 【输入】 第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100。 然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于1000。 【输出】 输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。 【输入样例】 3 2 3 1 1 1 1 1 1 1 1 1 1 1 1 【输出样例】 2 2 2 2 2 2 2 2 2 #include <iostream> #define A 100+5 using namespace std; int i,j; int main() { int n,m,k,a[A][A],b[A][A],c[A][A]={0}; cin>>n>>m>>k; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>a[i][j]; } } for(i=0;i<m;i++) { for(j=0;j<k;j++) { cin>>b[i][j]; } } for(i=0;i<n

1126:矩阵转置

瘦欲@ 提交于 2019-12-12 12:59:08
【题目描述】 输入一个n行m列的矩阵A,输出它的转置AT。 【输入】 第一行包含两个整数n和m,表示矩阵A的行数和列数(1≤n≤100,1≤m≤100)。 接下来n行,每行m个整数,表示矩阵A的元素。相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。 【输出】 m行,每行n个整数,为矩阵A的转置。相邻两个整数之间用单个空格隔开。 【输入样例】 3 3 1 2 3 4 5 6 7 8 9 【输出样例】 1 4 7 2 5 8 3 6 9 #include <iostream> #define A 100+5 using namespace std; int i,j; int main() { int n,m,a[A][A]; cin>>n>>m; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>a[i][j]; } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { cout<<a[j][i]<<" "; } cout<<endl; } return 0; } 来源: CSDN 作者: C_Dreamy 链接: https://blog.csdn.net/C_Dreamy/article/details/103506616

(转载)漫画:为什么你需要了解数据结构中的图?

◇◆丶佛笑我妖孽 提交于 2019-12-12 09:52:54
原文地址: https://blog.csdn.net/csdnnews/article/details/88809812 图的概念 究竟什么是图呢?大家先来想一想咱们常用的互联网产品。 举个栗子,大家一定都用过微信,假设你的微信朋友圈中有若干好友:张三、李四、王五、赵六、七大姑、八大姨。 而你七大姑的微信号里,又有若干好友:你、八大姨、Jack、Rose。 微信中,许许多多的用户组成了一个多对多的朋友关系网,这个关系网就是数据结构当中的 图(Graph) 。 再举一个栗子,咱们在用百度地图的时候,常常会使用导航功能。比如你在地铁站A附近,你想去的地点在地铁站F附近,那么导航会告诉你一个最佳的地铁线路换乘方案。 这许许多多地铁站所组成的交通网络,也可以认为是数据结构当中的图。 图,是一种比树更为复杂的数据结构。树的节点之间是 一对多 的关系,并且存在父与子的层级划分;而图的顶点(注意,这里不叫节点)之间是 多对多 的关系,并且所有顶点都是平等的,无所谓谁是父谁是子。 图的术语 下面我们来介绍一下图的基本术语: 在图中,最基本的单元是 顶点(vertex) ,相当于树中的节点。顶点之间的关联关系,被称为 边(edge) 。 在有些图中,每一条边并不是完全等同的。比如刚才地铁线路的例子,从A站到B站的距离是3公里,从B站到C站的距离是5公里......这样就引入一个新概念:边的 权重

分类器性能评价

此生再无相见时 提交于 2019-12-12 08:15:56
问题由来 以邮件分类为例: 我们可以忍受收件箱中偶尔出现的垃圾邮件,但是绝不能忍受,合法邮件被误扔如垃圾邮件夹中,万一这是一封女神or男神的表白信,这岂不是因此错过了一段旷世姻缘? 一、分类器性能度量指标 在之前,我们都是基于错误率来衡量分类器任务的成功程度的。错误率指的是在所有测试样本中错分的样本比例。实际上,这样的度量错误掩盖了样例如何被错分的事实。在机器学习中,有一个普遍适用的称为 混淆矩阵(confusion matrix)的工具 ,它可以帮助人们更好地了解分类中的错误。有这样一个关于在房子周围可能发现的动物类型的预测: 利用混淆矩阵就可以更好地理解分类中的错误了。如果矩阵中的非对角元素均为0,就会得到一个完美的分类器。 接下来,我们考虑另外一个混淆矩阵,这次的矩阵只针对一个简单的二类问题。混淆矩阵如下图所示: 可以看到,在这个二分类问题中,如果对一个正例正确地判为正例,那么就可以认为产生了一个真正例(True Positive,TP,也称真阳);如果对一个反例正确地判为反例,则认为产生了一个真反例(True Negative,TN,也称真阴);如果对一个正例错误地判为反例,那么就可以认为产生了一个伪反例(False Negative,FN,为称假阴);如果对一个反例错误地判为正例,则认为产生了一个伪正例(False Positive,FP,也称假阳)。 在分类中