深度学习篇---数据存储类型
文章目录
- 前言
- 第一部分:C语言中的数据存储类型
- 1. char(通常是8位)
- 优点
- 缺点
- 2. short(通常是16位)
- 优点
- 缺点
- 3. int(通常是32位)
- 优点
- 缺点
- 4. long(通常是32位或64位)
- 优点
- 缺点
- 5. long long(通常是64位)
- 优点
- 缺点
- 6. float(通常是32位)
- 优点
- 缺点
- 7. double(通常是64位)
- 优点
- 缺点
- 第二部分:Python中的数据存储类型
- 1. int(整数类型)
- 优点
- 缺点
- 2. float(浮点数类型)
- 优点
- 缺点
- 3. complex(复数类型)
- 优点
- 缺点
- 4. bool(布尔类型)
- 优点
- 缺点
- 5. bytes(字节类型)
- 优点
- 缺点
- 6. str(字符串类型)
- 优点
- 缺点
- 7. list(列表类型)
- 优点
- 缺点
- 8. tuple(元组类型)
- 优点
- 缺点
- 9. dict(字典类型)
- 优点
- 缺点
- 第三部分:深度学习中的数据存储类型
- float32的优点
- 1.精度与范围
- 2.硬件支持
- 3.兼容性
- 其他数据类型
- 1.float16(半精度浮点数):
- 优点
- 缺点
- 应用
- 2.int32(32位整数):
- 3.int64(64位整数):
- 4.bool(布尔型):
- 总结
前言
以上就是今天要讲的内容,本文仅仅介绍了C、Python以及深度学习中的数据类型。
第一部分:C语言中的数据存储类型
在C语言中,不同的存储类型有不同的位数,这些位数决定了变量的取值范围、精度以及内存占用。以下是一些常见的存储类型及其位数,以及它们的优劣点:
1. char(通常是8位)
优点
占用内存最少,适合存储小范围的数据。
适合处理ASCII字符。
缺点
取值范围有限,通常为**-128到127(有符号)或0到255(无符号)**。
对于需要更大范围的数据不适用。
2. short(通常是16位)
优点
取值范围比char大,通常为**-32768到32767(有符号)或0到65535(无符号)。**
占用内存比int少,适合在内存受限的情况下使用。
缺点
对于一些需要更大范围的数据仍然不够用。
在某些平台上,访问速度可能不如int。
3. int(通常是32位)
优点
取值范围较大,通常为-2,147,483,648到2,147,483,647(有符号)或0到4,294,967,295(无符号)。
在大多数现代平台上,int是整数类型中的标准选择,访问速度通常较快。
缺点
占用内存比short和char多。
对于非常大的数值,取值范围仍然有限。
4. long(通常是32位或64位)
优点
在64位平台上,long通常为64位,提供了更大的取值范围,通常为-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号)。
适合处理需要更大范围的数据。
缺点
在32位平台上,long与int相同,为32位。
占用内存比int多。
5. long long(通常是64位)
优点
提供了非常大的取值范围,适合处理极大数值。
在32位和64位平台上都是64位,提供了跨平台的兼容性。
缺点
占用内存是所有整数类型中最多的。
在一些老平台上可能不被支持。
6. float(通常是32位)
优点
占用内存比double少。
对于大多数科学计算和工程应用来说,精度足够。
缺点
精度不如double。
对于需要极高精度的计算可能不够用。
7. double(通常是64位)
优点
提供了更高的精度,适合科学和工程计算。
在大多数现代平台上是标准的双精度浮点数类型。
缺点
占用内存是浮点类型中最多的。
对于一些不需要高精度的应用来说,可能过于奢侈。
选择合适的存储类型时,需要根据应用的需求、内存限制、性能要求以及数据的取值范围来决定。通常,选择最小的适合数据范围的类型可以节省内存并提高效率。
第二部分:Python中的数据存储类型
在Python中,不像C语言那样直接指定变量的位数,因为Python是一种高级语言,它抽象了底层的内存管理。不过,Python中的数据类型仍然有不同的内存占用和适用场景。以下是一些常见的Python数据类型及其优劣点:
1. int(整数类型)
优点
Python 3中的int类型没有固定的大小限制,可以处理任意大小的整数,只受限于可用内存。
简单易用,自动处理整数溢出。
缺点
对于非常大的整数,计算速度可能会变慢。
占用内存比固定大小的整数类型多。
2. float(浮点数类型)
优点
适合表示小数和分数。
在大多数现代平台上,float通常是64位双精度浮点数。
缺点
精度有限,不能精确表示所有实数(例如,0.1 + 0.2 不等于 0.3)。
对于需要极高精度的计算,可能不够用。
3. complex(复数类型)
优点
可以轻松表示复数。
内置了复数运算的支持。
缺点
占用内存是浮点数的两倍,因为复数由实部和虚部两个浮点数组成。
对于不需要复数运算的场景来说,使用复数类型是不必要的。
4. bool(布尔类型)
优点
适合表示真**(True)或假(False)**的值。
在内部,布尔值通常占用一个字节。
缺点
除了表示真或假之外,布尔类型没有其他用途。
虽然内存占用小,但在大多数情况下,这并不是一个考虑因素。
5. bytes(字节类型)
优点
适合处理二进制数据。
占用内存与数据长度成正比。
缺点
不能直接表示文本字符串,需要编码和解码。
对于非二进制数据处理不适用。
6. str(字符串类型)
优点
适合处理文本数据。
支持多种编码,如UTF-8,可以处理国际化文本。
缺点
相对于字节类型,字符串类型在内存中占用更多空间,因为每个字符可能占用多个字节。
字符串操作(如连接和比较)可能比字节操作慢。
7. list(列表类型)
优点
可以存储任意类型的元素。
提供了丰富的操作方法,如append、pop等。
缺点
访问和插入操作的时间复杂度较高(O(n))。
占用内存较多,因为列表在内部维护了额外的信息(如元素数量)。
8. tuple(元组类型)
优点
不可变,可以作为字典的键。
占用内存通常比列表少,因为元组是不可变的。
缺点
元组一旦创建,其内容不能更改。
功能性不如列表丰富。
9. dict(字典类型)
优点
提供了快速的键值对查找。
键值对形式的数据结构非常适合表示关联数组。
缺点
占用内存较多,因为字典在内部维护了哈希表。
键必须是不可变类型。
选择合适的存储类型时,需要考虑数据的特点、操作的频繁程度以及内存的使用效率。Python的数据类型选择更侧重于数据结构和算法的适用性,而不是底层的位数。
第三部分:深度学习中的数据存储类型
在深度学习中,经常使用**float32(32位浮点数)**作为默认的数据类型,原因如下:
float32的优点
1.精度与范围
精度与范围: float32提供了足够的精度来表示大多数深度学习模型中的权重和梯度,同时其数值范围也足够大,可以覆盖大多数训练过程中遇到的数值。
2.硬件支持
硬件支持: 现代GPU和TPU针对float32运算进行了优化,使用float32可以获得更好的性能。
3.兼容性
兼容性: 大多数深度学习框架默认使用float32,因此使用这种数据类型可以确保与各种工具和库的兼容性。
其他数据类型
除了float32,以下也是深度学习中常用的数据类型:
1.float16(半精度浮点数):
优点
优点:占用的内存更少,可以加快计算速度,尤其是在拥有专门硬件支持的设备上。
缺点
缺点:精度较低,可能导致数值稳定性问题。
应用
应用:在某些情况下,如模型量化或混合精度训练,float16被用于加速训练和减少内存占用。
2.int32(32位整数):
应用:通常用于表示类别标签、索引或需要较高精度的整数运算。
3.int64(64位整数):
应用:当int32的范围不足以表示数据时,如大型数据集的索引。
4.bool(布尔型):
应用:用于表示真值,例如在条件语句或掩码操作中。
选择数据类型时,需要根据模型的精度要求、硬件支持、内存限制和性能需求来权衡。在某些情况下,使用较低精度的数据类型(如float16或int8)可以在不显著牺牲模型性能的情况下减少内存使用和加快计算速度。然而,这需要仔细的数值稳定性分析和可能的模型调整。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了C、Python以及深度学习中的数据类型。
相关文章:

深度学习篇---数据存储类型
文章目录 前言第一部分:C语言中的数据存储类型1. char(通常是8位)优点缺点 2. short(通常是16位)优点缺点 3. int(通常是32位)优点缺点 4. long(通常是32位或64位)优点缺…...

可被electron等调用的Qt截图-录屏工具【源码开放】
1. 工具功能简介: (1)、QT5.15.2截图工具(exe)可单独使用或嵌入IM(嵌入方法参照:https://gitee.com/lykiao/yfscreenshot_release) (2)、支持通过Windows消息通知截图成功或取消 (3)、支持圆形、矩形、线条…...

electron 应用开发实践
参考链接: https://blog.csdn.net/2401_83384536/article/details/140549279...

openssl 生成证书 windows导入证书
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

程序员学英文之At the Airport Customs
Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…...

字节iOS面试经验分享:HTTP与网络编程
字节iOS面试经验分享:HTTP与网络编程 🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 字节iOS面试经验分享:HTT…...

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

前端八股CSS:盒模型、CSS权重、+与~选择器、z-index、水平垂直居中、左侧固定,右侧自适应、三栏均分布局
一、盒模型 题目:简述CSS的盒模型 答:盒模型有两种类型,可以通过box-sizing设置 1.标准盒模型(content-box):默认值,宽度和高度只包含内容区域,不包含内边距、边框和外边距。 2.边框盒模型&a…...

Linux网络 | 网络层IP报文解析、认识网段划分与IP地址
前言:本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外, 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说, 开始我们的学习吧!! ps:本节正式进入网络层喽, 友友们…...

服务器虚拟化实战:架构、技术与最佳实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分,通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…...

(leetcode 213 打家劫舍ii)
代码随想录: 将一个线性数组换成两个线性数组(去掉头,去掉尾) 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…...

[C语言日寄] <stdio.h> 头文件功能介绍
在C语言的世界里,<stdio.h> 是一个极其重要的头文件,它提供了标准输入输出功能,是C语言程序与用户交互的核心工具。今天,我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...

一文读懂 Faiss:开启高维向量高效检索的大门
一、引言 在大数据与人工智能蓬勃发展的当下,高维向量数据如潮水般涌现。无论是图像、音频、文本,还是生物信息领域,都离不开高维向量来精准刻画数据特征。然而,在海量的高维向量数据中进行快速、准确的相似性搜索,却…...

【二叉搜索树】
二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它具有以下特征: 若它的左子树不为空,则…...

R语言统计分析——ggplot2绘图5——拟合光滑曲线
参考资料:R语言实战【第2版】 ggplot2包可以通过计算统计函数并添加到图形中。例如:分级数据、计算密度、轮廓和分位数等。这里我们重点将添加平滑曲线(线性、非线性和非参数)到散点图中。 我们可以使用geom_smooth()函数来添加一…...

疯狂拆单词01
疯狂拆单词01 有些单词是可以拆的,不,是可以反复拆的,拆着拆着,你的词汇量,就能快速飙升: 【】disappointment disappointment n.失望,沮丧,扫兴 (ment-名缀࿰…...

高效学习方法分享
高效学习方法分享 引言 在信息高速发展的今天,学习已经成为每个人不可或缺的一部分。你是否曾感到学习的疲惫,信息的爆炸让你无从下手?今天,我们将探讨几种高效的学习方法,帮助你从中找到适合自己的学习之道。关于学…...

01.双Android容器解决方案
目录 写在前面 一,容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups(Control Groups) 1.1.3 联合文件系统(Union File System) 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署(CI/…...

一文大白话讲清楚webpack进阶——9——ModuleFederation实战
文章目录 一文大白话讲清楚webpack进阶——9——ModuleFederation实战1. 啥是ModuleFederation2. 创建容器应用3. 创建远程应用4. 启动远程应用5. 使用远程应用的组件 一文大白话讲清楚webpack进阶——9——ModuleFederation实战 1. 啥是ModuleFederation 先看这篇文章&#…...

Mysql意向锁
这里写目录标题 前置问题概念作用兼容互斥性总结 前置问题 首先我们需要问自己什么是意向锁? 为什么要有意向锁? 意向锁如何使用? 概念 mysql官网上对于意向锁的解释中有这么一句话 The main purpose of IX and IS locks is to show that …...

输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
input_strinput("请输入一行字符: ") letter0 #表示英文字母的个数 space0 #表示空格的个数 digit0 # 表示数字的个数 others0 #表示其它字符的个数for char in input_str:if char.isalpha(): #判断字符char是否字母letter1elif char.isspace(): # 判断是否空格space…...

AD电路仿真
目录 0 前言 仿真类型 仿真步骤 仿真功能及参数设置 仿真模型 应用优势 1 新建原理图 2 放置元器件及布线 3 放置探头 4 实验结果 Operating Point 分析的作用 DC Sweep 的主要功能 Transient Analysis 的主要功能 AC Analysis 的功能 5 总结 1. 直流工作点分析…...

vim 中粘贴内容时提示: -- (insert) VISUAL --
目录 问题现象:解决方法:问题原因: 问题现象: 使用 vim 打开一个文本文件,切换到编辑模式后,复制内容进行粘贴时有以下提示: 解决方法: 在命令行模式下禁用鼠标支持 :set mouse …...

Redis_Redission的入门案例、多主案例搭建、分布式锁进行加锁、解锁底层源码解析
目录 ①. Redis为什么选择单线程? ②. 既然单线程这么好,为什么逐渐又加入了多线程特性? ③. redis6的多线程和IO多路复用入门篇 ④. Redis6.0默认是否开启了多线程? ⑤. REDIS多线程引入总结 ①. Redis为什么选择单线程? ①…...

ZZNUOJ(C/C++)基础练习1021——1030(详解版)
目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 (C语言版,三目运算)C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...

力扣116. 填充每个节点的下一个右侧节点指针
Problem: 116. 填充每个节点的下一个右侧节点指针 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 本题目的难点在于对于不同父节点的邻接问题因此我们可以抽象将两两节点为一组(不同父节点的两个孩子节点也抽象为一组)…...

寒武纪MLU370部署deepseek r1
文章目录 前言一、平台环境准备二、模型下载三、环境安装四、代码修改五、运行效果 前言 DeepSeek-R1拥有卓越的性能,在数学、代码和推理任务上可与OpenAI o1媲美。其采用的大规模强化学习技术,仅需少量标注数据即可显著提升模型性能,为大模…...

Python NumPy(10):NumPy 统计函数
1 NumPy 统计函数 NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 1.1 numpy.amin() 和 numpy.amax() numpy.amin() 用于计算数组中的元素沿指定轴的最小值。 numpy.amin(a, axisNone, outNone, keep…...

Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 Chapter1 Ubuntu下的DoxygenVScode实现C/C接口文档自动生成1、 Doxygen简介1. 安装Doxygen1)方法一:2)方法二:2. doxygen注释自动生成插件3. doxygen注释基本语法4. doxygen的生成…...

【字符串两大注意事项】
表达字符串的方式 1.双引号:"hello world" 2.字符指针:char* ptr "hello world" 3.字符数组:char arr[] "hello world"辨析 项目表示方式代表含义内存分布1“hello world”字符串字面量字符串常量就是数据…...