【Numpy基础知识】Datatypes数据类型

news2025/4/10 23:13:07

Numpy 数据类型

来源:Numpy官网:https://numpy.org/doc/stable/user/basics.html

在这里插入图片描述

文章目录

    • Numpy 数据类型
        • 导包
        • 【1】数组类型和类型之间的转换
        • 【2】数组标量
        • 【3】溢出错误
        • 【4】扩展精度

导包

import numpy as np

【1】数组类型和类型之间的转换

NumPy支持比Python更多的数字类型。


支持的基元类型与 C语言 中的基元类型密切相关:

Numpy类型C语言类型
numpy.bool_bool
numpy.bytesigned char
numpy.ubyteunsigned char
numpy.shortshort
numpy.ushortunsigned short
numpy.intcint
num.uintcunsigned int
numpy.int_long
numpy.uintunsigned long
numpy.longlonglong long
numpy.ulonglongunsigned long long
numpy.half / numpy.float16
numpy.singlefloat
numpy.doubledouble
numpy.longdoublelong double
numpy.csinglefloat complex
numpy.cdoubledouble complex
numpy.clongdoublelong double complex

NumPy 数值类型是 dtype(数据类型)对象的实例,每个对象都具有独特的特征。

有 5 种基本数值类型,分别表示布尔值(布尔值)、整数(整数)、无符号整数 (uint)、浮点数(浮点数)和复数。名称中带有数字的那些表示类型的位大小(即表示内存中的单个值需要多少位)。某些类型(如 int 和 intp)具有不同的位大小,具体取决于平台(例如 32 位与 64 位计算机)。在与寻址原始内存的低级代码(如 C 或 Fortran)接口时,应考虑这一点。

数据类型可以用作将 python 数字转换为数组标量的函数,将数字序列用作该类型的数组,或者用作许多 numpy 函数或方法接受的 dtype 关键字的参数。一些例子:

x = np.float32(1.0)
x
1.0
y = np.int_([1, 2, 4])
y
array([1, 2, 4])
z = np.arange(3, dtype=np.uint8)
z
array([0, 1, 2], dtype=uint8)

数组类型也可以用字符代码引用,主要是为了保持与旧包(如 Numeric)的向后兼容性。某些文档可能仍引用这些内容,例如:

np.array([1, 2, 3], dtype='f')
array([1., 2., 3.], dtype=float32)
np.array([1, 2, 3], dtype='f').dtype
dtype('float32')

但是建议改用 dtype 对象。

要转换数组的类型,请使用 .astype() 方法(首选)或类型本身作为函数。例如:

print(z.dtype)
uint8
z.astype(float)
array([0., 1., 2.])
z.astype(float).dtype
dtype('float64')
np.int8(z).dtype
dtype('int8')

请注意,上面,我们使用 Python 浮点对象作为 dtype。NumPy 知道 int 指的是 np.int_,bool 表示np.bool_,float是np.float_的,complex是np.complex_的。其他数据类型没有 Python 等效项。

要确定数组的类型,请查看 dtype 属性:

z.dtype
dtype('uint8')

dtype 对象还包含有关类型的信息,例如其位宽和字节顺序。数据类型还可以间接用于查询类型的属性,例如它是否为整数:

d = np.dtype(int)
d
dtype('int32')
np.issubdtype(d, np.integer)
True
np.issubdtype(d, np.floating)
False

【2】数组标量

NumPy 通常将数组的元素作为数组标量(具有关联 dtype 的标量)返回。数组标量与 Python 标量不同,但在大多数情况下它们可以互换使用(主要例外是早于 v2.x 的 Python 版本,其中整数数组标量不能充当列表和元组的索引)。有一些例外,例如当代码需要非常具体的标量属性时,或者当它专门检查值是否是 Python 标量时。通常,通过使用相应的 Python 类型函数(例如,int、float、complex、str、unicode).

使用数组标量的主要优点是它们保留了数组类型(Python 可能没有匹配的标量类型可用,例如 int16)。因此,使用数组标量可确保数组和标量之间的行为相同,无论值是否在数组内。NumPy 标量也有许多与数组相同的方法。

【3】溢出错误

当值需要的内存多于数据类型中的可用内存时,NumPy 数值类型的固定大小可能会导致溢出错误。例如,numpy.power 对 64 位整数正确计算 100 ** 8,但对 32 位整数给出1874919424(不正确)。

np.power(100, 8, dtype=np.int64)
10000000000000000
np.power(100, 8, dtype=np.int32)
1874919424

对于整数溢出,NumPy 和 Python 整数类型的行为明显不同,并且可能会使期望 NumPy 整数的行为类似于 Python 的 int 的用户感到困惑。与NumPy不同,Python的int的大小是灵活的。这意味着 Python 整数可以扩展以容纳任何整数,并且不会溢出。

NumPy 提供 numpy.iinfo 分别验证 NumPy 整数和浮点值的最小值或最大值numpy.finfo

np.iinfo(int)
iinfo(min=-2147483648, max=2147483647, dtype=int32)
np.iinfo(np.int32)
iinfo(min=-2147483648, max=2147483647, dtype=int32)
np.iinfo(np.int64)
iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64)

如果 64 位整数仍然太小,则结果可能会转换为浮点数。浮点数提供更大但不精确的可能值范围。

np.power(100, 100, dtype=np.int64)
0
np.power(100, 100, dtype=np.float64)
1e+200

【4】扩展精度

Python 的浮点数通常是 64 位浮点数,几乎等同于 np.float64。在某些异常情况下,更精确地使用浮点数可能很有用。这在 numpy 中是否可行取决于硬件和开发环境:具体来说,x86 机器提供具有 80 位精度的硬件浮点数,虽然大多数 C 编译器将其作为long double长双精度类型提供,但 MSVC(Windows 构建的标准)使long doubledouble(64 位)相同。NumPy使编译器的long double可用作np.longdouble(和np.longdouble用于复数)。np.clongdouble你可以通过np.finfo(np.longdouble)找出你的numpy提供了什么.

NumPy 不提供比 C 的long double更高的 dtype;特别是,128位IEEE四精度数据类型(FORTRAN的REAL*16)不可用。

为了有效地对齐内存,np.longdouble 通常以零位填充存储,可以是 96 位还是 128 位。哪个更有效取决于硬件和开发环境;通常在 32 位系统上,它们填充为 96 位,而在 64 位系统上,它们通常填充为 128 位。np.longdouble 填充到系统默认值;np.float96 和 np.float128 是为需要特定填充的用户提供的。np.float96尽管名称不同,np.float96 和 np.float128 仅提供与 np.longdouble 一样多的精度,即在大多数 x86 机器上为 80 位,在标准 Windows 版本中为 64 位。np.float128

请注意,即使 np.longdouble 提供比 python float 更高的精度,也很容易失去额外的精度,因为 python 经常强制值通过 float。float例如,% 格式化运算符要求将其参数转换为标准 python 类型,因此即使请求了许多小数位,也无法保持扩展精度。使用值 1 + np.finfo(np.longdouble).eps 测试代码可能很有用.eps.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

弃购频频发生?跨境电商卖家必知的弃购原因以及解决方案!

关键词:弃购、跨境电商卖家 电子商务商店平均有 75% 的销售额因数字购物车放弃而损失。 本文分解了放弃购物车的主要原因(以及如何预防)。 放弃购物车的十大原因 放弃购物车是一个问题。正如我们在介绍中分享的那样,据估计&#…

使用css3实现一个超浪漫的新年倒计时

新年快到了,使用css3实现一个超浪漫的新年倒计时吧,希望大家喜欢。 目录 1 实现思路 2 实现浪漫的心形背景 3 布局小时分钟和秒的区域 4、js倒计时 5、然后就是将所得的小时、分钟、秒对DOM进行赋值 6、每秒一更新 7、补充知识点1- 倒计时为什…

爆款微信小游戏,你都知道几款?

紧随微信2017年上线小程序平台,11月份便开始向各大小游戏厂商发送邀请函开发微信小游戏。2017年12月28日,微信正式对外开放微信小游戏。 就微信小游戏来说,其开发者数量在今年已经超过10万人;而产品方面除了《跳一跳》《羊了个羊…

全网首次揭秘:微秒级“复活”网络的HARP协议及其关键技术

导读|云计算时代,承担服务器之间数据传输工作的交换机成了数据中心的“神经枢纽”,一旦出故障将波及上层业务。然而单个交换机故障时,腾讯云的新一代高性能网络却可以在100微秒内找到新的通路实现0断链,做到高可用、高…

基于springboot layui疫苗接种信息管理系统源码

开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 开发技术:springboot layui 伴随着社会的迅速发展,电子计算机对世界的作用影响是全面并且长久的。人们日常生活消费综合应用水平的持续增高,生活中人…

[ 数据结构 -- 手撕排序算法总结篇 ]

文章目录前言一、常见的排序算法二、测试排序的性能对比随机数排序时间对比有序数排序时间对比三、排序算法的复杂度四、排序算法的稳定性前言 手撕排序算法总结 本篇文章进行总结,我会对比并分析常见的几种排序,例如像插入排序,冒泡排序&am…

【金猿案例展】福特电马——一键五联私域流量运营

‍映盛中国案例本项目案例由映盛中国投递并参与“数据猿年度金猿策划活动——《2022大数据产业年度创新服务企业》榜单/奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业随着中国电动车市场及消费者对电动汽车的需求的不断变化,汽车市场进入存量竞争时…

如何用VS2010创建并生成动态链接库

1、目的 在某些应用程序场景下,需要将一些类或者方法编译成动态链接库dll,以便别的.exe或者.dll文件可以通过第三方库的方式进行调用,下面就简单介绍一下如何通过VS2010来创建动态链接库。 2、新建动态链接库 1) 打开VS2010&…

546103-85-9,PR-AMC,二肽标记肽

PR-AMC, a fluorogenic Plasmodium falciparum dipeptidyl aminopeptidase 1 (DPAP1, cathepsin C) substrate.一种含氟恶性疟原虫二肽基氨基肽酶1 (DPAP1,组织蛋白酶C)底物。编号: 177167 中文名称: 二肽标记肽PR-7-氨基-4-甲基香豆素2HCl英文名: H-Pro-Arg-AMCCAS…

clickhouse 数据字典使用详解

一、数据字典介绍 数据字典是ClickHouse提供一种非常简单且实用的存储媒介,他以键值和属性映射的形式定义数据。字典中的数据会主动或被动加载到内存并支持动态更新。由于字典数据常驻内存的特性,所以非常适合保存常量或经常使用的维度表数据&#xff0c…

2001-2020年沪深A股上市公司管理者短视主义指标数据

2001-2020年沪深A股上市公司管理者短视主义指标数据 1、时间:2001-2020年 2、包括所有沪深A股所有上市公司 3、指标包括: 证券代码:以上海证券交易所和深圳证券交易所公布的证券代码为准。 证券简称:以上海证券交易所和深圳证…

从搭建到落地,详解证券基金行业数字化运营体系

近年来,金融行业的数字化转型呈现了新的特点,即要做更精准的营销和数字化运营。本文根据神策数据杨雪杉关于《面向落地的证券基金行业运营体系搭建》的主题演讲整理,点击文末“阅读原文”即可观看完整版演讲回放。一、基于 SDAF 数据闭环方法…

ubuntu20.04 设置 rc.local 开机自启动脚本一文配置

前言 系统:ubuntu20.04LTS 本来觉得似乎好像是一件简单的事情 实际运行处理的时候发现还是有点复杂,面对这样的过程中的总结如下: 第一步 终端执行查看开机可以启动的服务, 执行 ls /lib/systemd/system 你可以看到有很多启动脚本, 其中就有我们需要的 rc-local.s…

让你室友、工友、小孩断网 安全风险演示

前提: ① 、你需要 和 你室友处于同一个局域网,互相能ping通 ②、你需要知道你室友的IP ③、您可能需要一个linux 设备,手机也行(需要安装termux 来执行命令)、linux系统电脑、树莓派等都可以。 -----------------…

【MAX7800羽毛板更新固件及下载bug修复】

【MAX7800羽毛板更新固件及下载bug修复】1. 前言2. 首次固件更新2.1 更新MAX32625PICO(“PICO”)调试适配器固件2.2 使用eclipse开发3. 下载bug修复3.1 当你的下载口出现Error: Target not examined yet3.2 修复方法5. 小结1. 前言 原理图和BOM可在MAX7…

express再度复习,小白篇

js----后端编程,Express框架,npm包管理工具,- es6模块化,使用express创建web应用,路由拆分,中间件 , 热更新,脚手架_阿 尭的博客-CSDN博客之前学习的时候整理的一篇草率博客,复习的时候混忘了。今天再重新学习一下expr…

【强化学习基础】强化学习的基本概念:状态、动作、智能体、策略、奖励、状态转移、轨迹、回报

文章目录1.状态(State)2.动作(Action)3.智能体(Agent)4.策略(Policy)5.奖励(Reward)6.状态转移(State transition)7.智能体与环境交互…

“margin”外边距的各种奇特现象

我们大家在初学css布局html页面结构的时候,肯定会经常使用到“margin”外边距这个属性,这个属性对我们的页面布局十分有用,也十分方便,但是这个属性在使用的时候经常会出现一些奇特的现象,导致我们的页面布局和想要完成…

开发一个MyBatis通用Mapper的轮子

目录 一、前言 二、需求 三、实现原理 1、基于MyBatis3提供的SqlProvider构建动态Sql 2、基于自定义注解,为实体和数据库表建立对应关系 四、代码实现 1、自定义注解 2、几个pojo,用来保存实体对应的信息 3、定义开头说的BaseMapper 4、SqlPro…

Nginx-负载均衡

负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都有调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理 配置过程 1、需要在nginx.conf配置文件中添加服务组 服务组中…