【C语言/C++干货系列】你真的了解数组吗?

上千字干货带你深入了解C/C++动态规划 动态规划(Dynamic Programming,简称DP),是一种通过把复杂问题分解为相对简单的子问题的方式求解最优策略的方法,可以有效的解决背包问题、资源分配问题、最短路径问题和复杂系统可靠性问题等求最优解策略问题。译文:一般这些子问题很相似,可以通过函数关系式递推出来。然后呢,动态规划就致力于解决每个子问题一次,减少重复计算,比如斐波那契数列就可以看做入门级的经典动态规划问题。——维基百科说实话,我看我也头痛,拿来装杯不错,真理解还得靠自己啊! 阅读详情

目录

广告

前言

一维数组

二维数组

字符数组

尾声


广告

                                            点击👇领取20+精品游戏

我不允许还有人不知道我的一个精品资源:良心商家C++小游戏合集,真的超棒的!

内涵20+精选游戏,均可在DEV C++运行!代表作:

无尽之剑5.0【限定版】 超级升级!新增了非常多功能!战斗界面全新更新(1000+行有效代码)

丧失危机2【存档版】 可以存档啦!剧情一波三折,非常刺激!(1900+行有效代码)

愤怒的小鸟【图形界面版】 图形界面?泰库辣!玩一个下午都不会腻!(400+行有效代码)

价格只需要 5 积 分 !

性价比超越%99的资源!

购买链接🔗:

良心商家C++小游戏合集icon-default.png?t=N7T8https://download.youkuaiyun.com/download/class_x/89470226?spm=1001.2014.3001.5503

前言

在C语言中,数组是一种基本的数据结构,用于存储一系列相同类型的数据。数组可以是多维的,最常见的是一维数组和二维数组。字符数组用于存储字符串。

一维数组

定义
一维数组是一系列数据的集合,每个数据都是相同类型的,可以通过索引来访问。

类型说明符

数组名[数组长度];



应用方法
初始化:可以在定义时初始化数组
访问:通过索引访问数组元素,索引从0开始
遍历:通常使用for循环来遍历数组
初始化
在C语言中,一维数组可以在声明时进行初始化。
以下是一些常见的初始化方法:

完全初始化:初始化时为数组的每个元素指定一个值

int arr[5] = {1, 2, 3, 4, 5}; 
// 所有元素都被初始化



部分初始化:初始化时只为数组的一部分元素指定值,未指定的元素自动初始化为0

int arr[5] = {1, 2};
// arr[0] = 1, arr[1] = 2, arr[2] = arr[3] = arr[4] = 0



省略数组大小:在初始化时可以省略数组的大小,编译器会根据初始化列表中的元素数量自动确定数组的大小

int arr[] = {1, 2, 3, 4, 5}; 
// 数组大小为5



指定初始化器:C99标准引入了指定初始化器,可以初始化数组的特定元素

int arr[5] = {[2] = 10, [4] = 20};
// arr[2] = 10, arr[4] = 20, 其他元素为0



字符串初始化:字符数组可以用字符串常量进行初始化,编译器会在字符串的末尾自动添加\0(空字符)作为结束符

char str[] = "Hello";
// 包含空字符'\0',数组大小为6




零初始化:如果数组在声明时没有被显式初始化,那么其中的元素将自动初始化为0(对于整数和浮点数)或空字符(对于字符数组)

int arr[5]; 


 



#include <stdio.h>
int main() {
    int arr1[5] = {1, 2, 3, 4, 5}; // 完全初始化
    int arr2[5] = {1, 2}; // 部分初始化
    int arr3[] = {1, 2, 3, 4, 5}; // 省略数组大小
    int arr4[5] = {[2] = 10, [4] = 20}; // 指定初始化器
    char str[] = "Hello"; // 字符串初始化
    printf("arr1: %d %d %d %d %d\n", arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]);
    printf("arr2: %d %d %d %d %d\n", arr2[0], arr2[1], arr2[2], arr2[3], arr2[4]);
    printf("arr3: %d %d %d %d %d\n", arr3[0], arr3[1], arr3[2], arr3[3], arr3[4]);
    printf("arr4: %d %d %d %d %d\n", arr4[0], arr4[1], arr4[2], arr4[3], arr4[4]);
    printf("str: %s\n", str);
    return 0;
}



结果:


!!!注意,数组的大小必须是一个整型常量表达式,这意味着数组的大小不能是变量!


示例

#include <stdio.h>
int main() {
    int numbers[5] = {1, 2, 3, 4, 5}; // 定义并初始化数组
    int sum = 0;
    // 遍历数组并计算元素之和
    for (int i = 0; i < 5; i++) {
        sum += numbers[i];
    }
    printf("数组元素之和为:%d\n", sum);
    return 0;
}



结果

数组元素之和为:15


二维数组

定义

二维数组可以看作是数组的数组,即它由多个一维数组组成,通常用于表示表格或矩阵。

类型说明符 数组名[行数][列数];



应用方法
初始化:可以在定义时初始化二维数组。
访问:通过行索引和列索引访问数组元素。
遍历:通常使用嵌套的for循环来遍历二维数组。
初始化
在C语言中,二维数组可以在声明时进行初始化。
以下是一些常见的初始化方法:

完全初始化:初始化时为二维数组的每个元素指定一个值

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; 
// 所有元素都被初始化



部分初始化:初始化时只为二维数组的一部分元素指定值,未指定的元素自动初始化为0

int arr[2][3] = {{1}, {2}};
// arr[0][0] = 1, arr[1][0] = 2, 其他元素为0



省略行大小:在初始化时可以省略数组的行大小,但列大小必须指定。编译器会根据初始化列表中的元素数量自动确定行的大小

int arr[][3] = {{1, 2, 3}, {4, 5, 6}}; 
// 自动确定为2行3列的数组



省略所有大小:如果两个维度都省略,则必须提供足够的初始化器来确定大小

int arr[][] = {{1, 2}, {3, 4}}; 
// 错误,至少需要指定一维的大小



逐个初始化:可以逐个为二维数组的元素指定值,而不必按照行的形式组织

int arr[2][3] = {1, 2, 3, 4, 5, 6}; 
// 等同于{{1, 2, 3}, {4, 5, 6}}


零初始化:如果二维数组在声明时没有被显式初始化,那么其中的元素将自动初始化为0

int arr[2][3]; 
// 所有元素都初始化为0



示例:

#include <stdio.h>
int main() {
    int arr1[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 完全初始化
    int arr2[2][3] = {{1}, {2}}; // 部分初始化
    int arr3[][3] = {{1, 2, 3}, {4, 5, 6}}; // 省略行大小
    int arr4[2][3] = {1, 2, 3, 4, 5, 6}; // 逐个初始化
    int arr5[2][3]; // 零初始化
    // 打印数组内容
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr1[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr2[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr3[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr4[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr5[i][j]);
        }
        printf("\n");
    }
    return 0;
}


 

!!!注意,二维数组的第一维的大小可以省略(如果提供了足够的初始化器来确定行数),但第二维的大小必须指定!

举例
示例

#include <stdio.h>
int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义并初始化二维数组
    int i, j;
    // 遍历并打印二维数组
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}



 


字符数组

定义
字符数组用于存储字符串,实际上是一个一维的字符集合。

char 数组名[长度];



应用方法
初始化:可以在定义时初始化字符数组。
访问:通过索引访问字符。
字符串操作:可以使用字符串库函数(如strcpy, strlen, strcmp等)进行操作。
初始化
在C语言中,字符数组用于存储字符串,可以在声明时进行初始化。
以下是一些常见的初始化方法:

字符串初始化:使用双引号括起来的字符串常量来初始化字符数组。编译器会在字符串的末尾自动添加一个空字符\0作为字符串的结束标志。

char str[] = "Hello"; 
// 自动包含空字符'\0',数组大小为6



字符初始化:使用单引号括起来的字符来初始化字符数组的每个元素。

char str[] = {'H', 'e', 'l', 'l', 'o', '\0'}; 
// 手动添加空字符,数组大小为6



部分初始化:初始化时只为字符数组的一部分元素指定值,未指定的元素自动初始化为空字符\0。

char str[10] = "Hello"; 
// str[0]到str[4]被初始化为'H', 'e', 'l', 'l', 'o',其余为'\0'



省略数组大小:在初始化时可以省略字符数组的大小,编译器会根据初始化列表中的元素数量自动确定数组的大小,并添加一个额外的元素用于存储空字符\0。

char str[] = "Hello"; 
// 自动确定为大小为6的数组



零初始化:如果字符数组在声明时没有被显式初始化,那么其中的元素将自动初始化为空字符\0。

char str[10]; 
// 所有元素都初始化为'\0'



示例:

#include <stdio.h>
int main() {
    char str1[] = "Hello"; // 字符串初始化
    char str2[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 字符初始化
    char str3[10] = "Hello"; // 部分初始化
    char str4[] = "Hello"; // 省略数组大小
    char str5[10]; // 零初始化
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    printf("str3: %s\n", str3);
    printf("str4: %s\n", str4);
    // 打印str5的内容和长度
    printf("str5: ");
    for (int i = 0; i < 10; i++) {
        printf("%c", str5[i]);
    }
    printf("\n");
    return 0;
}


 


!!!注意,字符数组的大小必须足够容纳字符串中的所有字符以及空字符\0。如果数组大小小于字符串长度,则编译器不会添加空字符,这可能导致字符串处理函数的行为不确定!

举例
示例

#include <stdio.h>
#include <string.h>
int main() {
    char greet[6] = "Hello"; // 定义并初始化字符数组
    char message[20];
    // 使用strcpy复制字符串
    strcpy(message, "World");
    strcat(greet, " ");
    strcat(greet, message);
    printf("拼接后的字符串:%s\n", greet);
    printf("字符串长度:%zu\n", strlen(greet));
    return 0;
}



 


分析
在上述示例中,字符数组greet被初始化为"Hello",然后使用strcat函数将message的内容连接到greet后面,最终输出拼接后的字符串及其长度。

尾声

在这里,就是这文章的结尾了,我想说,数组真的给我带来了很多的便利,不用去一个一个的建立变量,所以,我觉得,能够教一些入门新手,我已经很满足了。

Linux C/C++ 服务器/后端开发/后台开发学习路线 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」。 这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其它人写得不一样, 也定下了一个目标,这篇文章,不能是简单的堆砌学习资源和书单推荐,更要细化如何有效的去执行落地。 争取做到让看到的同学有一种相见恨晚的感觉哈哈哈。 所以大家可以试着看一下,帮我检查下有没有达到预想的效果哈哈,希望不要被打脸???? 那就正式开始吧。 这篇文章会有点长有点干,可以先去冲杯咖啡,收藏关注一波慢慢看~ 正文 | 干货 |收藏【文末附上学习路线 阅读详情

相关推荐

C语言必背100代码系列-第四篇:递归与算法

想彻底掌握递归思维与核心算法?这篇硬核教程带你从零构建递归逻辑,破解经典算法难题!从阶乘到汉诺塔,从二分查找到快速排序,本文通过10个实战案例+动画级注释,深度解析递归三要素、栈溢出规避、时间复杂度优化等关键技术。每个案例直击痛点:目录遍历的递归陷阱、快速排序的分区策略、DFS迷宫求解……更有尾递归优化、迭代法转换等进阶方案。无论你是准备算法面试的求职者,还是想提升代码效率的开发者,这篇覆盖递归、搜索、排序等核心领域的干货合集,都能让你的算法功力实现质的飞跃!

Start_mswin的博客 7488

C语言:一维数组、二维数组、字符数组介绍

C语言:一维数组、二维数组、字符数组介绍

Weiki的博客 3526

【C++养成计划】不聊学习只谈干货(Day1)

给小白定制的专属《C++21天养成计划》,让你以最快的速度掌握C++编程

不积跬步,无以至千里! 9808

一维数组、二位数组、字符串数组详解

目录 数组简述 一维数组的定义 一维数组的初始化 二维数组的定义 二维数组元素的引用 多维数组 字符数组和字符串 字符数组 字符串 二维字符串数组 数组简述 数组是构造类型之一 数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。 数组中个元素的数据类型要求相同,用数组名和下标确定,数组可以是一维的也可以是多维的。 一维数组的定义 所谓一维数组是指只有一个下标的数组,它在计算机的内存中是连续存储的。 C语言中,一维数组的说名一般形式如下: &lt

weixin_55420595的博客 2775

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2117

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 415

数组、字符串及字符串相关函数

第一部分:复习 1、预处理阶段主要进行了3个工作:宏定义、文件包含、条件编译 2、宏定义:用宏值代替宏名。分为不带参数宏定义和带参数宏定义 3、宏定义语句:#define 宏名(参数列表) 字符串。 4、宏定义仅仅是简单的替换,不进行语法正确性检查 5、文件包含:将其他文件的内容全部包括进本文件中 6、文件包含语句:#include 或 #include"文件"。使用会去C库函数中寻找

LSG_Dawn的博客 982

OnePose++: Keypoint-Free One-Shot Object Pose Estimation without CAD Models

算法:首先采用LoFTR的细匹配模块,将粗匹配点周围的小窗口内,通过对比特征找到最相似的位置,细化当前特征点的位置。算法:PnP算法,利用3D点和2D投影点的对应关系,计算相机相对于物体的6D姿态(位置朝向)。算法:使用COLMAP,对2D粗匹配对(不依赖传统关键点匹配)进行特征轨迹计算并生成半稠密点云,每个3D点包含坐标和对应的2D投影点。算法:LoFTR粗匹配模块,将每一个像素点视为伪关键点,生成半稠密的2D匹配对。输入:优化后的3D、当前视图的2D特征点。输出:粗半稠密点云以及物体的特征轨迹。

雨落倾城的博客 888

C:知识点:一维数组、二维数组、字符数组(不断更新)

经常用下面的方式定义数组 #define N 10 int a[N]; 也经常在定义数组的时候就给初值 #define N 10 int a[N]={1,3,5,7,9}; 给了初值,就可以不写长度,下面默认数组长度是5 #define N 10 int a[]={1,3,5,7,9}; 定义数组时,[ ]里不能有变量,也不能为实型。 使用数组元素时,a[0]~a[9]是合法...

icnhh的专栏 1618

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1931

调整开关频率处理传导骚扰超标的系统方法

针对某产品在传导骚扰测试中660kHz频点超标问题,分析发现与DC-DC模块开关频率直接相关。通过调整模块开关频率至500kHz,使其避开标准限值严苛频段(0.53-1.8MHz),在不改变硬件设计的情况下实现测试通过。该案例表明,利用EMC标准的频率特性进行"频谱设计"比传统滤波手段更高效,建议在多模块系统中采用1:2:4等频率规划策略,从源头降低噪声耦合风险。这一频率迁移思路为EMC优化提供了新范式。

硬核科技 334

一维数组,二维数组,字符串数组,指针的有关知识点整理

到今天为止算是正式把数组,字符串,以及指针这一块初步复习了一遍。 下面是有关知识点总结: int array[2]={1,2};//一维数组 array:一维数组的地址,同时也是一维数组首元素的地址* array+i :一维数组第i+1个元素的地址 *array:一维数组首元素的值 *(array+1):一维数组第i-1个元素的的值 *array+1:一维数组首元素的值+1; in...

Jam 1001

基于深度学习的水质预测:多参数监测与预测

在本篇博客中,我们详细介绍了如何使用深度学习技术处理水质预测问题,包括数据集的准备与预处理、多层感知机模型的构建、模型的训练与评估以及模型优化策略。我们使用 Python 语言基于 TensorFlow 和 Keras 框架实现了模型,并给出了各种模型优化方法及对应代码。通过实践,我们可以发现深度学习技术在水质预测方面具有很好的应用潜力。在实际应用中,我们还可以根据具体问题和数据集进一步调整和优化模型,以获得更好的预测性能。

斌擎科技 1081

【C语言】C语言数组篇(一定要深度理解数组和熟练使用数组~)

数组是由数据类型相同的一系列元素组成的。需要使用数组时,通过声明数组告诉编译器数组中内含多少元素和这些元素的类型。编译器根据这些信息正确的创建数组。普通变量可以使用的类型,数组元素都可以使用。变长数组实际上就是数组[]里可以放变量表达式,在Linux环境下gcc可以使用,不过要注意的是,这样创建一个数组是不能初始化的。当然支持C99标准的编译器底下也可以这样使用。数组的灵活运用可以高效地解决一些比较困难的问题,它可以很好地训练我们的编程思维。

Welcome home | Jian Liao 's blog 1657

2025年华为杯中国研究生数学建模竞赛A题 通用神经网络处理器下的核内调度问题 思路+代码

针对通用神经网络处理器下的核内调度问题,我们提出了一套基于分层优化框架的系统性解决方案。该方案首先通过缓存敏感的启发式拓扑排序算法生成最小峰值缓存占用的调度序列,在满足计算图依赖关系的前提下优先选择能够释放或减少缓存占用的节点;随后采用最佳适应算法进行精细化的缓存分配,结合LRU换出策略动态管理多级缓存空间,最小化额外数据搬运量;最后引入多目标遗传算法进行联合优化,在严格控制数据搬运量不显著增加的前提下,通过关键路径分析、流水线并行和数据预取等技术进一步优化总执行时间。

YOLO 786

高通平台WIFI学习-- WCN7851 三频 2X2 MIMO DBS HBS Wi-Fi 7介绍

WCN7851是支持Wi-Fi 7和蓝牙5.4的三频SoC芯片,具有以下核心特性:采用NSP334封装,支持2.4GHz/5GHz/6GHz三频段并发操作,最高速率达5.8Gbps;集成MU-MIMO、4096QAM调制技术,6GHz频段支持320MHz带宽;提供PCIe Gen3接口和低功耗设计,兼容多种无线标准。电气特性包括1.8V/1.2V可编程GPIO、76.8MHz时钟源要求,以及详细的射频性能参数。该芯片通过多链路操作和动态频率选择等先进功能,实现高性能无线连接。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1278

C语言结构体(struct)最全的讲解(万字干货)

结构体的定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。 结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以做成你想要的数据类型。以方便日后的使用。 在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言无法操作数据库,所以在项目中通过对结构体内部变量的操作将大量...

lyh290188的博客 29万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c语言的数组详解

数组的基础知识,数组名和指针的关系。

m0_73693552的博客 983

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 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'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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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, 'Too big error');```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('state',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, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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, 'Too big error');%% ex3 neural net with dropoutrand('state',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, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C语言和C++的区别和联系,大多数人都说错了

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达前言你完全理解 C 语言和 C++ 之间的联系与区别吗?看完这篇文章,也许你会有一些新的收获。转载自丨C语言与CPP编程C语言和C++到底是什么关系?首先C++和C语言本来就是两种不同的编程语言,但C++确实是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。对于有些人说的C++完全就包含了C语言的说法也并没有错。C++一...

小白学视觉 1116

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【C++干货铺】内存管理new和delete

C&C++内存管理!!!malloc/realloc/calloc/free!!!new/delete!!!

qq_55119554的博客 2682

c++ 构造函数数组_超详细 C/C+学习路线分析:学好 C/C+

C/C++在编程语言中的重要性不言而喻,那么,我们如果想要学习C/C++,应该怎么去学习?需要学习一些什么东西呢?一、C/C++入门阶段刚入门的时候我们主要是学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法,这对以后的程序员之路非常重要!所以学习语言更为重要C语言的学习:数据类型、变量、内存布局、指针基础;字符串、一维数组、二维数组;一级指针,二级指针,三级指针,N级指针概念,指针...

weixin_39996134的博客 140

C++全部基础知识汇总 全篇超3万字超详细!(干货笔记分享)零基础学C++这一篇就够了

C++ 是一门面向对象编程的语言,把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为,更注重的是程序的整体设计。 2.c++输入输出 3.小结 三、命名空间与作用域 1.作用域 2.命名空间 3.为什么需要using namespace std ? 四、动态申请内存空间new-delete 1.c语言动态申请内存空间 2.new-delete 3.new指针、new数组 3. 总结 五、bool布尔类型 1.自制BOOL类型 2.bool 3.BO

努力让自己的能力配得上梦想. 4293

*C语言 —— 函数(纯干货版)

ret_type fun_name(形式参数)...⚪ ret_type:函数返回类型⚪ fun_name:函数名⚪ 括号中放的是形式参数⚪ {...}:括起来的是函数体如果我们将函数的定义放在函数的调用后边,会发生什么?因为C语言编译器对源代码进行编译的时候,是从第一行往下扫描的,当遇到函数调用的时候,并没有发现前面有该函数的定义,因而出现警告!如何解决上述此类问题?答:在函数调用之前先声明一下该函数,声明函数只要交代清楚:函数名,函数的返回类型和函数的参数。

coder4_的博客 1282

c++ 三维数组 初始化_编程C语言进阶篇——构造类型:数组

在c语言的实际应用中,我们常常需要同时对多个数据进行处理,如果没有专门批量处理数据的方法,就会给我们的程序编写造成巨大的影响。而这种批量处理数据的方法就是我们这次的主题——数组。一、数组是什么在c语言中,数组是用来处理一系列相同类型元素的集合。所谓数组,就是用一个统一的名字代表这批数据,而用序号或下标区分各个数据。 这就是数组的定义。数组中只能存一种类型的数据如: 存放一组int类型的数据,数组名...

weixin_32154109的博客 2441

c++输入二维数组_C语言100题集合028-输出二维数组任一行任一列值

系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。喜欢的同学记得点赞、转发、收藏哦~后续C语言经典100例将会以pdf和代码的形式发放到公众号欢迎关注:计算广告生态 即时查收1 题目功能:输出二维数组任一行任一列值描述:一个 3 行 4 列的数组,输入要显示数组元素的所在行数和列数,将在终端显示该数组元素的值2 思路熟悉ex027的案例,对上一个案例的简单应用要彻底理解指针和二维数组...

weixin_39649660的博客 531

2024年最新《零基础看得懂的C语言入门教程 》——(一,极致干货

距离上一次编写C语言的教程是5年前了(2015年),由于自己是从初一时开始学习编程,深知学习编程的痛苦。当时正在念大学的我想着分享自己自学编程的经验,搭建了一个社区(社区之后自己维护太懒,维护了一年不到关闭了)第一次编写了C语言教程,分享自己的学习经验。社区关闭后,于2017年上传至了优快云留存至今。现在回过头查看当时自己编写的教程,由于当时技术的浅薄,编写的教程还是存在很多的不足,故有了一个重新编写C语言教程的想法。此次编写计划编写一个快速入门的系列以及另一个全方面学习C语言的系列。

2401_84976285的博客 1294
上一篇: C++做游戏技巧3 无回车输入
下一篇: 【C/C++干货系列】深度优先搜索DFS算法
锋利5钻石剑
博客等级 码龄2年 112粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值