5.3.2 稀疏矩阵及其三元组结构

C++实现稀疏矩阵的操作,三元组存储---数据结构 顺序存储结构来表示三元组表,则可以的稀疏矩阵的一种压缩形式。三元组表又称有序的双下标法,它的特点是,非零元素在表中有序存储,因此便于进行依行顺序处理矩阵运算。 1.需求分析: (1) 输入的形式和输入值的范围:无需自己输入数据,程序是可以自动生成一个稀疏矩阵并输出在界面中。 (2)输出的形式:建立成功后会将三元组表中的数据按照每个元素所在的行号,列号输出元素值;稀疏矩阵的加法则基于三元组表,将两个三元组表的元素进行合并成一个三元组表,然后按照合成的三元组表输出稀疏矩阵信息。 (3) 程序所能达到的功能: 1 阅读详情
  • 稀疏因子 δ:
    在 m x n 的矩阵中,有 t 个元素不为0,那么 δ = t / ( m + n )
    通常当δ <= 0.05 时,称该矩阵为稀疏矩阵

  • 稀疏矩阵的压缩存储:
    只存储矩阵的非零元,因此除了存储非零元的值外,还要存储该非零元所在的行数与列数。

  • 稀疏矩阵的三元组存储结构

#define	MAXSIZE   12500  //设置非零元个数最大值为12500

typedef struct
{
	int i, j;        //该非零元的行下标和列下标
	ElemType  e;	//三元组的元素值
}Triple;		//三元组的一个元素

typedef struct
{
	//非零元三元组表,data[0]未用
	Triple  data[MAXSIZE + 1];
	//该稀疏矩阵的行数,列数,非零元个数
	int  mu, nu, tu;
}TSMatrix;
  • 稀疏矩阵的转置:从M到T
Status TransposeMatrix(TSMatrix M, TSMatrix &T){
if(!M.tu)
{
 return OK;
}
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
q= 1;
for(int col=1; col<=M.nu; col++)
{
	for(int cnt=0; cnt<=M.tu; cnt++)
	{
		if(M.data[cnt].j == col)
		{
			T.data[q].i = M.data[cnt].j;
			T.data[q].j = M.data[cnt].i;
			T.data[q].e = M.data[cnt].e;
			q++;
		}
	}
}
return OK;
}

此算法时间复杂度为 nu * tu,而经典转置算法的时间复杂度为 mu * nu。
若 tu 和 mu * nu 一个数量级,那么 mu * nu * nu >> mu * nu,虽然节约了空间,但时间复杂度大大增加。
因此该算法只适用于 tu << mu * nu的情况。

  • 对上面的方法进一步改进:快速转置法
    找到 M 的三元数组每一列的首元素在 T 中的位置,遍历 M
Status FastTransposeMatrix(TSMatrix M, TSMatrix &T)
{
	if(!M.tu)
	{
 		return OK;
	}
	T.mu = M.nu;
	T.nu = M.mu;
	T.tu = M.tu;
	//初始化数组
	for(col=1; col<=M.nu; col++)
	{
		num[col] = 0;
	}
	//求出 M矩阵 每一列有多少元素
	for(cnt=1; cnt<=M.tu; cnt++)
	{
		num[M.data[cnt].j]++;
	}
	//求出 M矩阵 每一列的起始位置(0号单元保留)
	loaction[1] = 1;
	for(col=2; col<=M.nu; col++)
	{
		location[col] = location[col-1] + num[col-1];
	}
	//开始转置
	for(cnt=1; cnt<=M.tu; cnt++)
	{
		tmp = M.data[cnt].j;
		T.data[location[tmp]].e = M.data[cnt].e;
		T.data[location[tmp]].j = M.data[cnt].i;
		T.data[location[tmp]].i = tmp;
		location[tmp]++;
	}
	return OK;
}
  • 带行链接信息的三元组表
    多了一个数组,存储每行首个非零元素的位置;便于随机存取每一行的非零元。
    否则当需要按行号存取某一行的非零元时,都需要从头开始进行查找。
typedef struct
{
	Triple data[MAXSIZE+1]; //非零元三元组表
	int rpos[MAXRC+1]; //各行第一个非零元的位置表
	int mu, nu, tu;//行数,列数,非零元个数
}RLSMatrix;
  • 求矩阵的积(经典法)Q = M * N,M为 m1 * n1 矩阵,N为 m2 * n2 矩阵,n1 == m2
for(i=1; i<=m1; i++)
{
	for(j=1; j<=n2; j++)
	{
		Q[i][j] = 0;
		for(k=1; k<=n1; k++)
		{
			Q[i][j] = Q[i][k] + Q[k][j];
		}
	}
}
  • 利用带行链接信息的三元组表求稀疏矩阵的积 ( Q = M * N )
    由于乘积结果 Q 也需要以行序来保存,而 Q 的第n行 与 M 的第n行是相对应的,因此依 M 的行序来依次处理即可,得到的结果也能方便地依行序存入一个顺序表。
    M中每一行的每一个非零元,乘以 N中的某一行,再相加,得到 Q中的一行。
    注意,下面的代码段是类C的伪码!!!
Status MultMatrix(RLSMatrix M,RLSMatrix N,
		  RLSMatrix &Q)
{
	if(M.nu != N.mu || M.tu * N.tu == 0)
	{
		return ERROR;
	}
	Q.mu = M.mu;
	Q.nu = N.nu;
	Q.tu = 0;
	// 依 M 的行序依次处理
	// 一次得到 Q 的一行值
	for(arrow=1; arrow<=M.mu; arrow++)
	{
		//累加器清0
		ctemp[] = 0;
		// rpos域 也要在这一过程中完成赋值
		Q.rpos[arrow] = Q.tu + 1;
		if(arrow < M.mu)
		{
			tp = M.rpos[arrow+1];
		}
		else
		{
			tp = Q.tu + 1;
		}
		for(p=M.rpos[arrow]; p<tp; p++)
		{
			brow = M.data[p].j;
			if(brow < N.mu)
			{
				t = N.rpos[brow+1];
			}
			else
			{
				t = N.tu + 1;
			}
			for(q=N.rpos[brow]; q<t; q++)
			{
				// 取列号,也是最终累加结果的列号
				ccol = N.data[q].j;
				ctemp[ccol] += M.data[p].e * N.data[q].e;
			}
		}
		for(ccol=1; ccol<=Q.nu; ccol++)
		{
			if(ctemp[ccol])
			{
				//这组值里面的非0项放到三元组里面
				if(++Q.tu > MAXSIZE)
				{
					return ERROR;
				}
				Q.data[Q.tu] = (arrow, ccol, ctemp[ccol]);
			}
		}
	}
	return OK;
}
时间复杂度
累加器 ctemp 初始化O(M.mu * N.mu)
求 Q所有非零元O(M.tu * N.tu / N.mu)
压缩存储O(M.mu * N.nu)
总的时间复杂度O(M.mu * N.nu + M.tu * N.tu / N.nu )
用稀疏矩阵的三元组进行加法 算法思想:在进行三元组的加法时前提条件:用while循环,它的出口条件为 i,j 都小于他们分别所对应的三元组中元素的个数。满足前提条件的情况下,分3种情况:1. 行列数相等;(1)相加等于零,则直接跳过,i++;j++;。(2)相加不为零,把相加后的数写下来,i++;j++; 2. A的行大于B的行;(1)写下行数小的一个,也就是B。然后进行B的j++;3. A的行小于B的行;(1)写下行数小的... 阅读详情

相关推荐

稀疏矩阵的三元组表示----(算法详解)

稀疏矩阵的三元组表示----(优化程序),介绍稀疏矩阵的概念的基本算法,算法均有给出源码,源码均经过调试,并由详解。

2301_80035594的博客 5330

稀疏矩阵的三元组存储

稀疏矩阵是一种特殊矩阵,其非0元素的个数远远小于0元素的个数。稀疏矩阵是针对稠密矩阵而言的。 为了节省存储空间,我们很容易地想到只保矩阵中极少数的非0元素就可以,而零元素不予考虑,进而可以想到对每一个非0元素我们只保存它的下标和值即可。为此,可以采用一个三元组来唯一地确定一个非0元素。在该三元组表中,各非0元素的三元组按在原矩阵中的位置以行优先的顺序依次存放,另外还要存储原矩阵的行数

jiyang_1的博客 8379

数据结构·练习·三元组表法实现稀疏矩阵的转置

数据结构·练习·稀疏矩阵的快速转置 一、问题描述 一个mxn的矩阵A,它的转置矩阵B是一个nxm矩阵,且A[i][j]=B[j][i],0<=i<=m-1,0<=j<=n-1,即A的行是B的列,A的列是B的行。 用三元组表对稀疏矩阵进行压缩存储,再进行时间复杂度O(n)的快速转置,最后输出稀疏矩阵。 其中m=4,n=5 二、算法概述 1、问题分析 1)压缩 2)转置 3)解压 2、算法描述 用三元组表压缩存储稀疏矩阵; 用向量num表示矩阵A每列的非零元素个数,用向量start表示

zhoujianqing2020的博客 5669

数据结构知识点总结

数据结构知识点总结

m0_63016794的博客 525

稀疏矩阵三元组存储结构的定义及其有关算法的实现

C++ Code jjbran 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

jjbran 1535

三元组顺序表,稀疏矩阵的三元组表示及(C语言)实现

本节介绍稀疏矩阵的三元组顺序表压缩存储方式。 通过《矩阵的压缩存储》一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; 矩阵的总行数和总列数; 图1 稀疏矩阵示意图 例如,图 1 是一个稀疏矩...

数据结构和算法教程(C语言版) 1万+

25-数据结构-稀疏矩阵-三元组

三元组-稀疏矩阵存储

奔心小韩的博客 1301

稀疏矩阵和三元组的基础理论

稀疏矩阵(矩阵零元素个数远大于非零元素),为节省存储空间,用三元组

算法----稀疏矩阵之三元组

三元组的表示 (1)、目的:对于在实际问题中出现的大型的稀疏矩阵,若用常规分配方法在计算机中储存,将会产生大量的内存浪费,而且在访问和操作的时候也会造成大量时间上的浪费,为了解决这一问题,从而善生了多种解决方案。 (2)、由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价。具体操作是:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元...

weixin_30530523的博客 3870

2025东三省D题深圳杯数学建模实战解析:基于多模型融合的法医STR混合样本智能识别系统

本文深入解析了2025年东三省数学建模竞赛D题,即深圳杯赛题,聚焦于法医STR混合样本的智能识别挑战。文章系统阐述了构建一个基于多模型融合的智能识别系统的完整流程,涵盖贡献者人数判定、DNA贡献比例估计、个体基因型推断以及STR谱图去噪四大核心步骤。通过融合高斯混合模型、随机森林、非负矩阵分解、小波变换与深度学习等多种技术,并强调特征工程的重要性,为破解法医DNA混合样本分析这一行业难题提供了清晰的数学建模与AI实战思路。

weixin_29050271的博客 391

从零到一:YOLOv8在边缘设备上的轻量化部署实战

本文详细介绍了YOLOv8在边缘设备上的轻量化部署实战,涵盖模型优化、TensorRT加速、剪枝与知识蒸馏等关键技术。通过工业质检和智能门禁项目案例,展示了如何将YOLOv8高效部署到树莓派、Jetson Nano等资源受限设备,显著提升推理速度和降低内存占用。文章还提供了动态分辨率调整、多模型级联部署等实用技巧,助力开发者实现边缘AI应用的高效落地。

weixin_29040367的博客 379

数组基础——稀疏矩阵与三元组

1.稀疏矩阵:矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(摘自百度百科)。 2.稀疏矩阵的优点:         (1)只对非零元素进行操作,计算速度快。         (2)采用三元组方式存储,节省存储空间。 3.稀疏矩阵的存储方式——三元组         将非...

qq_23726109的博客 2464

【运筹优化】VRPTW建模实战:Python+Gurobi求解带时间窗的车辆路径规划

本文详细介绍了如何使用Python和Gurobi求解带时间窗的车辆路径问题(VRPTW)。通过将物流调度难题抽象为混合整数规划模型,并逐步讲解建模、编码与求解过程,为读者提供了从理论到实践的完整指南,帮助解决物流配送中的路径优化挑战。

peace的博客 201

数据结构 稀疏矩阵三元组顺序表 基本操作

【数据结构】稀疏矩阵 三元组顺序表存储 基本操作 1.稀疏矩阵定义: 假设在 mn 的矩阵中,又t个元素不为零。δ = t/mn ,称δ为矩阵的稀疏因子,通常定义δ小于等于0.05时称为稀疏矩阵。 2.三元组顺序表存储结构 矩阵中每个元素用三个量存储,位置i,j 以及值e typedef struct { int i, j; //三元组的行列值 ElemType e; }Triple; ...

欢乐佛的博客 1万+

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 537

解答网友疑问:聊聊 SAP MRP 中追溯需求的技术实现

笔者到 SE37 里一查,果然有这个 Function Module,并且在里面设置断点之后,执行事务码 MD09 之后,设置在该 Function Module 内的断点也触发了,看来 ChatGPT 比较靠谱。因为红色区域的显示,是通过用户在 MD09 的 ALV 界面上双击触发的,因此我们直奔用户输入模块,PROCESS AFTER INPUT,在 check_fcode 的实现体内设置断点。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1026

数据结构与算法 三元组转置算法(稀疏矩阵)

三元组稀疏矩阵转置算法及相关讨论 本篇文章介绍稀疏矩阵中的数据如何存储的更加高效,以及矩阵转置的优良算法------三元组稀疏矩阵转置算法。 稀疏矩阵定义:矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix)。 稀疏因子:矩阵中的有效数据量 / 矩阵总元素...

quique的博客 1万+

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用!Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。Gemini Pro的表现超越了其他同类模型,当前版本配备了 32K 文本上下文窗口,可免费使用,且其定价将十分有竞争力。Gemini Pro具备丰富的功能:函数调用、数据嵌入、语义检索、自定义知识嵌入以及聊天功能。

HJ_blog 1246

三元组的稀疏矩阵转置

稀疏矩阵快速转置

weixin_45609535的博客 9033

亚马逊跨境电商选品数据分析:Python爬虫实战指南

本文将带领大家构建一套完整的亚马逊选品数据采集与分析系统,使用最新的Python技术栈,从零开始爬取亚马逊商品数据,并进行深度分析。

2201_76125261的博客 299

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

考研数据结构之数组(5.3)——使用三元组法表示稀疏矩阵(C表示)

使用三元组表示法来表示稀疏矩阵。 三元组数据结构是一个长度为n,表内每个元素都有3个分量的线性表,其3个分量分别为行下标和列下标。元素结构体定义如下: /* 三元组的结构体 */ typedef struct { int val;// 稀疏矩阵中非零元素的值 int i;// 稀疏矩阵中非零元素的行下标 int j;// 稀疏矩阵中非零元素的列下标 } Trimat; 在程序中如果要定义一个含有maxterms个非零元素的稀疏矩阵,则只需写成如下代码: Trimat trimat[maxt

二木成林 5683

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

用三元组存储稀疏矩阵及其快速转置

用三元组存储稀疏矩阵及其快速转置稀疏矩阵的三元组存储方式快速转置算法 稀疏矩阵的三元组存储方式 稀疏矩阵可以用一个三元组数组表示,数组每个元素是一个三元组,三元组形式为 (矩阵行号,矩阵列号,元素值) 三元组个数,即数组长度,为稀疏矩阵的非零元素个数。 三元组元素按照行号递增,列号递增的方式排序。 例如矩阵M: [100000020]\begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 2 & 0 \en

Disy13的博客 6580

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现

一、稀疏矩阵 对一个m×n的矩阵,设s为矩阵元素个数的总和,有s=m*n,设t为矩阵中非零元素个数的总和,满足t<<s的矩阵称作稀疏矩阵。符号“<<”读作小于小于。简单说,稀疏矩阵就是非零元素个数远远小于元素个数的矩阵。相对于稀疏矩阵来说,一个不稀疏的矩阵也称作稠密矩阵。  二、稀疏矩阵的压缩存储 稀疏矩阵的压缩存储方法,是只存储矩阵中的非零元素。 稀疏矩阵中每个非零元素及

程序带给我们的思考 5191

【数据结构:稀疏矩阵的基本操作】

本实验用C语言实现 稀疏矩阵:矩阵阶数很大,非零元个数较少,零元很多,但非零元的排列没有一定规律。 三元组表法:一种顺序存储(按行优先顺序存放)。一个非零元有行号、列号、值,为一个三元组,整个稀疏矩阵中非零元的三元组合起来称为三元组表。 实验内容: 1、设计三元组表的物理存储结构 2、设计稀疏矩阵的建立算法(数据从键盘输入) 如 0 0 0 0 3 0 0 1 2 ...

marblue_y的博客 6601

35-稀疏矩阵的三元组表示方式

1. 稀疏矩阵   一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数 t 很小时,即s&amp;amp;amp;amp;amp;amp;amp;amp;lt; 2. 稀疏矩阵的压缩存储方法   对于稀疏矩阵来说,如果我们还是用100×100的方式来存储的话,显然是非常浪费的,因此我们可以采用一种稀疏矩阵的压缩存储方式,即三元组方式。   三元组方式存储数据的策略是只存储非零元素。但是稀疏矩阵中非零元素的分布是没有任何规律的,在这种情况下,存储...

网络安全 11万+
上一篇: scanf 读取一个整数,输入却为小数的情况
下一篇: 5.3.4 矩阵及其十字链表结构
你板子冒烟了
博客等级 码龄8年 1278粉丝 582原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值