当前位置: 首页 > news >正文

【Go】Go数据类型详解—数组与切片

1. 前言

今天需要学习的是Go语言当中的数组与切片数据类型。很多编程语言当中都有数组这样的数据类型,Go当中的切片类型本质上也是对 数组的引用。但是在了解如何定义使用数组与切片之前,我们需要思考为什么要引入数组这样的数据结构。

1.1 为什么需要数组

❓ 现在有一个需求:对一个班级的学生做统一管理,能够方便的打印班级全部学生的姓名

我们通过以前的知识只能写出这样的一段代码:

var name1 = "zhangsan"
var name2 = "lisi"
var name3 = "wangwu"
fmt.Println(name1)
fmt.Println(name2)
fmt.Println(name3)

可想而知如果学生人数更多,代码量也会变得更为庞大,因此就出现了数组这样 连续存储结构 的数据类型,我们就可以定义一种数据类型就能对整个班级姓名做增删改查统一管理!

2. 数组的定义与使用

2.1 数组声明与访问

2.1.1 数组声明

数组的声明语法如下:

// var 数组名 [数组长度]元素类型
var stuNameArr [32]string

其中注意点如下:

  • 数组长度必须显示指定
  • 数组内部存储元素类型必须统一
  • 数组元素如果为基本类型且声明未赋值时默认为零值,比如string类型则为""、int为0
2.1.2 数组访问

数组访问则可以通过[] + 下标直接进行索引访问(下标从0开始)

// var 数组名 [数组长度]元素类型
var stuNameArr [32]string
stuNameArr[0] = "zhangsan"
stuNameArr[1] = "lisi"
fmt.Println(stuNameArr[0], stuNameArr[1])

同时数组也不能越界访问!!!在上述代码中可行索引区域为:[0, 32),因此使用stuNameArr[32]时就会出现编译错误,如果编译时检查不出越界则在运行过程中会出现panic错误信息!
在这里插入图片描述

2.1.3 数组声明并初始化

除了上述先声明后初始化的方式之外,Go中的数组还支持使用复合字面量的方式进行声明并初始化的过程,语法如下:

// var 数组名 = [数组长度]元素类型{元素值1, 元素值2...}
var nums = [3]int{1, 2, 3}
fmt.Println(nums, reflect.TypeOf(nums))

在这里插入图片描述

⭐ 扩展知识1:上述方式仍然需要我们手动指定数组长度,但是Go当中也提供了…的语法可以让编译器帮我们自动进行数组长度的计算!

// var 数组名 = [数组长度]元素类型{元素值1, 元素值2...}
var nums = [...]int{1,2,3, // 最后一个逗号不能省略
}
fmt.Println(nums, reflect.TypeOf(nums))

⭐ 扩展知识2:上述初始化方式只能从左到右依次赋值,不够灵活,Go还提供了更灵活的方式进行赋值——使用索引下标进行初始化赋值

// var 数组名 = [数组长度]元素类型{元素值1, 元素值2...}
var names = [3]string{0: "张三", 2: "李四"}
fmt.Println(names, reflect.TypeOf(names))
2.1.4 数组的迭代

迭代方式一:我们可以通过for循环的方式进行迭代,可以使用len内置函数得到数组的长度

var stus = [...]string{"zhangsan", "lisi"}
for i := 0; i < len(stus); i++ {fmt.Println(stus[i])
}

迭代方式二:Go语言还提供了range迭代收集器的方式进行遍历,其中i为元素下标,v为元素值,当然range关键字只适用于收集器

var stus = [...]string{"zhangsan", "lisi"}
for i, v := range stus {fmt.Println(i, v)
}

2. 切片

Go语言当中的切片是一种极其重要的数据类型,由于数组长度是固定的,因此操作起来十分麻烦,切片可以理解为是一个 动态数组,在开发中使用占比远远大于数组。

2.1 切片的创建方式

切片有如下两种创建方式:

  1. 创建方式1:使用数组的切片语法:arr[1:3]
  2. 创建方式2:使用make函数初始化:var slice = make([]int, len, cap)
2.1.1 创建方式1

首先先来看创建方式1:

var arr = [3]string{"zhangsan", "lisi", "wangwu"}
var slice = arr[1:3]
fmt.Println(arr, reflect.TypeOf(arr))
fmt.Println(slice, reflect.TypeOf(slice))

运行结果如下图所示:
在这里插入图片描述

❗ 注意:数组和切片虽然打印的形式非常类似,但是这是两种不同的数据类型,使用reflect.TypeOf数组的类型为 [3]string,但是切片的类型为[]string

切片语法:[startIndex:endIndex)

  1. 切片取到的区间为左闭右开
  2. 切片得到的元素数量为:endIndex - startIndex
  3. 数组和切片进行切片操作都能得到切片
  4. 当缺省开始位置时比如[:endIndex]返回从0位置到结束位置,当缺省结束位置时例如[startIndex:]表示从起始位置到区域末尾,两者都缺省例如[:]表示整个区间

练习题:

var arr = [5]int{10, 11, 12, 13, 14}
var s1 = arr[1:4]
fmt.Println(s1, reflect.TypeOf(s1)) 
var s2 = arr[2:5]
fmt.Println(s2, reflect.TypeOf(s2)) 
var s3 = s2[0:2]                    
s3[0] = 1000
fmt.Println(":::", s1, s2, s3)

运行结果如下图所示:
在这里插入图片描述

2.1.2 切片底层结构

翻看Go语言的源码就会发现,切片实际上就是一个结构体:内部结构如下:

// /src/runtime/slice.go
type slice struct {array unsafe.Pointerlen   intcap   int
}

各个字段含义如下:

  • array:该切片所引用的底层数组
  • len:切片的长度
  • cap:切片的容量,可用于扩容判断(后面会花大篇幅讲解)
var arr = [5]int{10, 11, 12, 13, 14}
var s1 = arr[1:4]
var s2 = arr[2:5]
var s3 = s2[0:2]                    

上述代码在内存中的结构是这样的:
在这里插入图片描述

  • arr指的就是底层数组所引用的起始位置地址
  • len指的就是当前切片的元素个数
  • cap指的是从引用的起始位置开始还剩余多少已分配空间可供使用
2.1.2.1 练习题1
var a = [...]int{1, 2, 3, 4, 5, 6}
a1 := a[0:3]
a2 := a[0:5]
a3 := a[1:5]
a4 := a[1:]
a5 := a[:]
a6 := a3[1:2]
fmt.Printf("a1的长度%d,容量%d\n", len(a1), cap(a1))
fmt.Printf("a2的长度%d,容量%d\n", len(a2), cap(a2))
fmt.Printf("a3的长度%d,容量%d\n", len(a3), cap(a3))
fmt.Printf("a4的长度%d,容量%d\n", len(a4), cap(a4))
fmt.Printf("a5的长度%d,容量%d\n", len(a5), cap(a5))
fmt.Printf("a6的长度%d,容量%d\n", len(a6), cap(a6))

运行结果:
在这里插入图片描述

2.1.2.2 练习题2
s1 := []int{1, 2, 3}
s2 := s1[1:]    
s2[1] = 4       
fmt.Println(s1) 

运行结果:

在这里插入图片描述

2.1.2.3 练习题3
var a = []int{1, 2, 3}
b := a
a[0] = 100
fmt.Println(b)

运行结果:

在这里插入图片描述

2.1.3 创建方式2(make函数)

跟指针类型类似,切片也是也是一种引用类型:因此声明未赋值时不会开辟空间进行初始化,如下代码是错误的:

var slice []int
slice[0] = 1

在指针章节我们通过new函数进行初始化并返回一个地址变量,但是在切片当中我们需要使用make函数进行初始化同时指定长度和容量参数

make函数基本语法:var slice = make(切片类型, 长度, 容量)

a := make([]int, 2) // 此时长度和容量都为2
b := make([]int, 2, 10)
fmt.Println(a, b) // [0, 0], [0, 0]
fmt.Println(len(a), len(b)) // 2 2
fmt.Println(cap(a), cap(b)) // 2 10

上述代码中我们使用make函数初始化a和b,第一行代码其内部构建了一个长度为2的数组,并初始化了一个切片数据类型,长度和容量都为2并指向对应底层数组;第二行代码其内部构建了一个长度为10的数组,并初始化了一个切片数据类型,长度为2容量为10并指向对应底层数组

2.2 切片扩容机制

append函数引入:由于数组长度是固定的,因此如果添加的元素过多就需要重新分配长度更大的数组并进行元素拷贝。而切片作为动态数组的优势就在于可以通过append函数自动进行扩容拷贝,简化了程序员开发成本

2.2.1 append基本用法

基本语法:append(切片, 元素值...)并返回一个新切片

var emps = make([]string, 3, 5)
emps[0] = "张三"
emps[1] = "李四"
emps[2] = "王五"
fmt.Println(emps) // ["张三", "李四", "王五"]
emps2 := append(emps, "rain")
fmt.Println(emps2) // ["张三", "李四", "王五", "rain"]
emps3 := append(emps2, "eric")
fmt.Println(emps3) // ["张三", "李四", "王五", "rain", "eric"]
// 容量不够时发生二倍扩容
emps4 := append(emps3, "yuan")
fmt.Println(emps4) // ["张三", "李四", "王五", "rain", "eric", "yuan"]

在这里插入图片描述

2.2.2 append扩容原理

💡 扩容机制:

  1. 如果当前切片的长度超过容量时,原数组空间不足以进行扩展,此时就会构建一个长度更大的新数组,并拷贝原数组的元素到新数组中,最后构建一个新的切片重新引用新数组并返回
  2. 当元素个数<1024的时候就进行二倍扩容,但是当元素个数>=1024时进行1.25倍扩容
2.2.2.1 练习题1
// 案例1
a := []int{11, 22, 33}
fmt.Println(len(a), cap(a)) // 3 3
c := append(a, 44)
a[0] = 100
fmt.Println(a) // [100, 22, 33]
fmt.Println(c // [11, 22, 33, 44]

在这里插入图片描述

运行结果:

在这里插入图片描述

2.2.2.2 练习题2
// 案例2
a := make([]int, 3, 10)
fmt.Println(a) // [0, 0, 0]
b := append(a, 11, 22) 
fmt.Println(a) // 小心a等于多少? [0, 0, 0]
fmt.Println(b) // [0, 0, 0, 11, 22]
a[0] = 100
fmt.Println(a) // [100, 0, 0]
fmt.Println(b) // [100, 0, 0, 11, 22]

在这里插入图片描述

运行结果:

在这里插入图片描述

2.2.2.3 练习题3
// 案例3
l := make([]int, 5, 10)
v1 := append(l, 1)
fmt.Println(v1) // [0, 0, 0, 0, 1]
fmt.Printf("%p\n", &v1)
v2 := append(l, 2) 
fmt.Println(v2) // [0, 0, 0, 0, 1, 2]
fmt.Printf("%p\n", &v2)
fmt.Println(v1) // [0, 0, 0, 0, 2]

运行结果:

在这里插入图片描述

2.2.2.4 经典面试题
arr := [4]int{10, 20, 30, 40}
s1 := arr[0:2] // [10, 20]
s2 := s1       //  // [10, 20]
s3 := append(append(append(s1, 1), 2), 3)
s1[0] = 1000
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(s3)
fmt.Println(arr)

2.3 切片的其余操作

我们已经介绍完了切片当中的append核心操作,该操作用于新增元素,那么切片如果执行插入、删除等操作呢?

❗ 注意:切片类型并没有提供如delete、insert等操作,仅仅只有append一个操作,但是我们可以通过append模拟插入、删除等操作

2.3.1 使用append进行头插
var a = []int{1,2,3}
a = append([]int{0}, a...) // 在开头添加1个元素
a = append([]int{-3,-2,-1}, a...) // 在开头添加1个切片
2.3.2 使用append在任意位置插入
var a []int
a = append(a[:i], append([]int{x}, a[i:]...)...) // 在第i个位置插入x
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i个位置插入切片
2.3.3 使用append进行删除
// 从切片中删除元素
a := []int{30, 31, 32, 33, 34, 35, 36, 37}
// 要删除索引为2的元素
a = append(a[:2], a[3:]...)
fmt.Println(a) //[30 31 33 34 35 36 37]

相关文章:

【Go】Go数据类型详解—数组与切片

1. 前言 今天需要学习的是Go语言当中的数组与切片数据类型。很多编程语言当中都有数组这样的数据类型&#xff0c;Go当中的切片类型本质上也是对 数组的引用。但是在了解如何定义使用数组与切片之前&#xff0c;我们需要思考为什么要引入数组这样的数据结构。 1.1 为什么需要…...

微服务中引入消息队列的利弊

微服务中引入消息队列的利弊 1、微服务架构中引入消息队列(Message Queue)的主要优势&#xff1a; 1.1 解耦(Decoupling) 服务之间不需要直接调用&#xff0c;通过消息队列实现松耦合 生产者和消费者可以独立扩展和维护 降低系统间的依赖性 1.2 异步处理(Asynchronous Proc…...

如何使用策略模式并让spring管理

1、策略模式公共接口类 BankFileStrategy public interface BankFileStrategy {String getBankFile(String bankType) throws Exception; } 2、策略模式业务实现类 Slf4j Component public class ConcreteStrategy implements BankFileStrategy {Overridepublic String ge…...

骑砍2霸主MOD开发(11)-可编程渲染管线Shader编程

一.固定渲染管线&可编程渲染管线 固定渲染管线:GPU常规渲染算法,将3D模型经过四大变换计算得到2D屏幕图像 可编程渲染管线:定制化GPU渲染算法,需要提交Shader至GPU中,GPU根据定制化算法得到2D屏幕图像 二.CoreShader&TerrainShader CoreShader:游戏中使用的静态shader…...

【PowerQuery专栏】PowerQuery 函数之CSV文件处理函数

CSV.Document 函数是进行CSV文件解析功能的函数,函数目前包含4个参数: 参数1为文件的数据源,数据类型为二进制类型,值为需要读取的文本数据参数2为列名称,数据类型为字符串类型,值为分割后的列名称参数3为分隔符,数据类型为任意类型,值为分割数据的分隔符参数4为文件编…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(4)

1.问题描述&#xff1a; 添加了很多的marker点&#xff0c;每个marker点都设置了customInfoWindow&#xff0c;但是每次只能显示一个customInfoWindow吗&#xff1f; 解决方案&#xff1a; Marker的InfoWindow每次只能显示一个。 2.问题描述&#xff1a; 在地图选型中&…...

通过ffmpeg将FLV文件转换为MP4

使用 ffmpeg 将 FLV 文件转换为 MP4 文件是一个常见的操作。ffmpeg 是一个强大的多媒体处理工具&#xff0c;支持多种格式的转换、剪辑、合并等操作。以下是详细的步骤和命令示例&#xff0c;帮助你完成这一任务。 安装 FFmpeg 如果你还没有安装 ffmpeg&#xff0c;可以根据你…...

深入分析Java中的重载与重写:理解多态的两个面向

深入分析Java中的重载与重写&#xff1a;理解多态的两个面向 之前其实写过一篇文章来探讨Java当中的方法重载与方法重写但当时学的还不够通透&#xff0c;分析有点片面&#xff0c;这次我从多态的角度对其进行分析&#xff0c;有问题欢迎大家来评论区一起探讨 在Java编程中&a…...

STM32的集成开发环境STM32CubeIDE安装

STM32CubeIDE - STM32的集成开发环境 - 意法半导体STMicroelectronics...

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

&#xff1a; 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中&#xff0c;博主将带大家去学习所谓的…...

25/1/13 嵌入式笔记 继续学习Esp32

PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09; 是一种通过快速切换高低电平来模拟中间电压值的技术。它广泛应用于控制 LED 亮度、电机速度、音频生成等场景。 analogWrite函数:用于在微控制器&#xff08;如 Arduino&#xff09;上生成模拟信号。 …...

C语言的语法糖

C语言的语法糖 引言 在程序开发的过程中&#xff0c;语言的设计和编写风格往往会直接影响开发效率和代码可读性。C语言作为一种广泛应用于系统编程和嵌入式开发的编程语言&#xff0c;其设计虽然追求简洁与高效&#xff0c;但在某些方面同样存在可以提高编程体验的“语法糖”…...

客户案例:致远OA与携程商旅集成方案

一、前言 本项目原型客户公司创建于1992年,主要生产并销售包括糖果系列、巧克力系列、烘焙系列、卤制品系列4大类,200多款产品。公司具有行业领先的生产能力,拥有各类生产线100条,年产能超过10万吨。同时,经过30年的发展,公司积累了完善的销售网络,核心经销商已经超过1200个,超…...

浔川 AI 翻译已修复,可正常使用

浔川 AI 翻译已修复&#xff0c;可正常使用 亲爱的用户们&#xff1a; 大家好&#xff01;经过技术团队的不懈努力&#xff0c;浔川 AI 翻译平台已完成修复&#xff0c;目前各项功能均已恢复正常&#xff0c;可流畅使用。在此&#xff0c;我们向一直以来关心和支持浔川 AI 翻译…...

【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的设计模式&#xff0c;它确保一个类只有一个实例&…...

D. Paint the Tree

https://codeforces.com/problemset/problem/1975/D 分析&#xff1a; 观察样例可以发现&#xff0c;对于PB第一次在位置 r 接触到红点之后&#xff0c;接下来的怎么走完全可以有PB说了算&#xff0c;情况不会更差。同时还能发现&#xff0c;大部分边都是需要走两遍的&#xff…...

ScratchLLMStepByStep:训练自己的Tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件&#xff0c;但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要组件&#xff1a; Tokenizer: 分词器的核心组件&#xff0c;定…...

【Linux】Socket编程-TCP构建自己的C++服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; Socket 编程 TCP &#x1f98b; TCP socket API 详解&#x1f98b; 多线程远程命令执行&#x1f98b; 网络版计算器&#xff08;应用层自定义协议与序列化…...

数据结构——线性表和顺序表

1、线性表的基本概念 1.1 定义 线性结构是简单且常用的数据结构&#xff0c;而线性表则是一种典型的线性结构 存储数据&#xff0c;最简单&#xff0c;最有效的方法是吧它们存储在一个线性表中 一个线性表是n个元素的有限序列。每个元素在不同的情况下有不同的含义&#xff0c…...

FunASR 在Linux/Unix 平台编译

第一步拉取镜像并生成容器&#xff1a; ### 镜像启动 通过下述命令拉取并启动FunASR软件包的docker镜像&#xff1a; shell sudo docker pull \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12 mkdir -p ./funasr-runtime-…...

AIP-200 先例

编号200原文链接AIP-200: Precedent状态批准创建日期2018-06-28更新日期2018-06-28 很多时候&#xff0c;API的编写方式会违反新的指导原则。此外&#xff0c;有时出于特定原因也需要打破标准&#xff0c;例如与现有系统保持一致、满足严格的性能要求或其他因素。最后&#xf…...

SAP五大核心模块:塑造企业数字化未来

在数字化转型的浪潮中&#xff0c;SAP&#xff08;Systems, Applications and Products in Data Processing&#xff09;以其强大的企业资源规划&#xff08;ERP&#xff09;系统&#xff0c;成为众多企业信赖的伙伴。SAP系统通过五大核心模块&#xff0c;即财务管理&#xff0…...

【UE5.3】fix DONET报错

新的机器 4070 gpu 运行ue项目, 可能是epic 启动器是vs安装的, vs安装的epic 启动器自己更新了一波,导致了.NET的问题? ue项目是拷贝远程的windows的电脑里面的,应该不会导致ue源码里的cs出问题? 【UE5.3】UnrealLink 安装:fix Detected compiler newer than Visual Stu…...

【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区

1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…...

pc 端 TensorRT API 实现 YOLOv11 的 C++ 小白部署经验

标题1 模型转化 python 先下载项目 https://github.com/ultralytics/ultralytics 同时下载模型 https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt pythonconda虚拟环境&#xff0c;主要是以下三个&#xff0c;其余缺什么直接pip anaconda…...

LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145185794 Scaling Laws (缩放法则) 是大模型领域中&#xff0c;用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律…...

【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题

【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络&#xff0c;通过对抗生成网络生成少数类样本&#xff0c;平衡欺诈数据中正类样本极…...

C++ 之多线程相关总结

C 之多线程相关总结 1.多线程相关基础知识 1.1 线程的创建和管理 1. std::thread 类&#xff1a; 用于创建和管理线程。通过将可调用对象&#xff08;如函数、函数对象、lambda 表达式&#xff09;作为参数传递给 std::thread 的构造函数&#xff0c;可以创建一个新的线程。…...

基于机器学习随机森林算法的个人职业预测研究

1.背景调研 随着信息技术的飞速发展&#xff0c;特别是大数据和云计算技术的广泛应用&#xff0c;各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式&#xff0c;为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步&#xff0c;如深度学习、强化学习等…...

性能测试 - Locust WebSocket client

Max.Bai 2024.10 0. 背景 Locust 是性能测试工具&#xff0c;但是默认只支持http协议&#xff0c;就是默认只有http的client&#xff0c;需要其他协议的测试必须自己扩展对于的client&#xff0c;比如下面的WebSocket client。 1. WebSocket test Client “”“ Max.Bai W…...

量子计算将彻底改变商业分析

虽然量子计算听起来颇具未来感&#xff0c;但这项技术正迅速走向成熟 —— 就如同 ChatGPT 这类人工智能&#xff08;AI&#xff09;工具一样。我相信&#xff0c;量子计算技术所产生的连锁反应很快就会对业务分析领域产生巨大影响。 什么是量子计算&#xff1f; 尽管名字听起…...

爬山算法与模拟退火算法的全方面比较

一、基本概念与原理 1. 爬山算法 爬山算法是一种基于启发式的局部搜索算法,通过不断地向当前解的邻域中搜索更优解来逼近全局最优解。它的核心思想是,从当前解出发,在邻域内找到一个使目标函数值更大(或更小)的解作为新的当前解,直到找不到更优的解为止。 2.模拟退火算…...

【深度学习】用RML2018训练好模型去识别RML2016的数据会遇到输入维度不匹配的问题,如何解决?

文章目录 问题解决办法1. 调整输入数据长度2. 修改模型结构(我个人比较推崇的方法)3. 迁移学习4. 重新训练模型5. 数据增强6. 其他差异问题 经常会有人问的一个问题: 我用RML2018跑的调制识别模型,用RML2016数据集能直接识别吗?(2018数据集信号样本的长度是1024,2016数据集…...

2025年1月17日(点亮一个 LED)

系统信息&#xff1a; Raspberry Pi Zero 2W 系统版本&#xff1a; 2024-10-22-raspios-bullseye-armhf Python 版本&#xff1a;Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习目标&#xff1a;…...

商用车电子电气零部件电磁兼容条件和试验(8)—辐射抗干扰(ALSE)和便携式发射机抗干扰(HPT)

写在前面 本系列文章主要讲解商用车电子/电气零部件或系统的传导抗干扰、传导发射和辐射抗干扰、电场辐射发射以及静电放电等试验内容及要求,高压试验项目内容及要求。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 目录 商用车电子电气零部件电磁兼容条件和试验—目录…...

NumPy;NumPy在数据分析中的应用;NumPy与其他库的搭配使用

NumPy&#xff1b;NumPy在数据分析中的应用&#xff1b;NumPy与其他库的搭配使用 NumPy&#xff1a;Python 数据分析的核心工具什么是 NumPy&#xff1f;NumPy 的主要优势 NumPy 在数据分析中的应用1. 数据处理与清洗2. 数学和统计分析3. 数组变换与矩阵运算 NumPy 与其他库的搭…...

机器学习经典无监督算法——聚类K-Means算法

目录 算法原理 算法步骤 算法API 算法导入 API参数理解 算法实现 算法原理 Kmeans 算法是一种无监督的聚类算法&#xff0c;目的是将数据集中的样本划分到 K 个不同的簇中。 聚类&#xff1a;将数据集中相似的数据点归为一组或一个簇的过程。 数据集&#xff1a;一组相…...

网络变压器的分类

网络变压器是局域网(LAN)中各级网络设备中必备的元件。它们的主要功能是传输数据&#xff0c;增强信号&#xff0c;并提供电气隔离&#xff0c;以防雷保护和匹配阻抗。网络变压器也被称为数据泵或网络隔离变压器。它们广泛应用于网络交换机、路由器、网卡、集线器等设备中。 网…...

【MySQL】复合查询+表的内外连接

复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接7.2.2右外连接 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f…...

创建模式、结构模式及行为模式

谁在什么地方提供什么功能&#xff1f; 要设计几个类?这些类各个是什么功能&#xff1f;相互间的关系是什么&#xff1f; 创建模式指的是对象那么多&#xff0c;怎么把它"生"出来&#xff1f;生几个&#xff1f;从这个角度上来说数组就是一种另类的创建模式。主要…...

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好&#xff0c;因为工具代表着一定的先进性&#xff1b;但是IDEA 2024好好的给我上了一课&#xff0c;比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…...

C语言中char str和char str[]的区别

char* str和char* str[]的区别&#xff1a;C语言中char *str[] 和char *str有什么区别-CSDN博客 char str 和 char str[] 在 C 语言中也有不同的含义和用途&#xff0c;以下是它们的区别&#xff1a; 1. char str 类型&#xff1a;这是一个单一的字符变量。 用途&#xff1a…...

(学习总结20)C++11 可变参数模版、lambda表达式、包装器与部分新内容添加

C11 可变参数模版、lambda表达式、包装器与部分新内容添加 一、可变参数模版基本语法及原理包扩展emplace系列接口 二、lambda表达式lambda表达式语法捕捉列表lambda的原理lambda的应用 三、包装器bindfunction 四、部分新内容添加新的类功能1.默认的移动构造和移动赋值2.声明时…...

备份和容灾之区别(The Difference between Backup and Disaster Recovery)

备份和容灾之区别 备份和容灾都是数据安全常见的保障手段&#xff0c;但是一般在正常业务运行时是无需用到这两个技术手段的。只有在业务已经崩溃&#xff0c;需要进行业务恢复时&#xff0c;这两种技术的价值才能真正体现。所以&#xff0c;备份和容灾可以说是数据安全最后两…...

Go语言之路————数组、切片、map

Go语言之路————数组、切片、map 前言一、数组二、切片三、map 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go&#xff0c;到后面能正常完成工作上的业务开发的过程&#xff…...

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…...

字符编码通过字节数组向16进制的互转【终端设备通讯案例篇】:微信小程序 JavaScript字符串转gb2312 字符编码,以16进制字符串传输。(接收蓝牙设备的信息,发送北斗终端消息)

文章目录 引言I 原理II 案例一:微信小程序字符串转gb2312 字符编码,以16进制字符串传输。字节数组 转16进制字符串微信小程序字符串转gb2312 字节数组(utf8ToGb2312Bytes)demo:gb2312 字符编码->字节数组->16进制字符串III 案例二: 小程序接收gb2312 的16进制字符串…...

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…...

协程(还需要输入3个字)

昨天我偶然听到协程这个概念&#xff0c;不禁好奇地了解了一下&#xff0c;做些笔记如下&#xff1a; 一、什么是协程 协程是在线程内部&#xff0c;由程序自己控制逻辑&#xff0c; 显式地让出控制权&#xff08;yield&#xff09;来实现任务切换&#xff0c;而不是由操作系…...

系统架构设计师-第1章-计算机系统知识要点

【本章学习建议】 根据考试大纲&#xff0c;本章主要考查系统架构设计师单选题&#xff0c;预计考1分左右。第二版教材2.2节增加了本块内容&#xff0c;但较为简略&#xff0c;需要课程补充&#xff0c;属于非重点内容。 1.1 计算机硬件组成 计算机的基本硬件系统由运算器、控…...