Python库numpy之五

Python库numpy之五

  • 数据类型
    • 数组类型和类型之间的转换
    • 数值数据类型
    • 字符串和字节的数据类型

数据类型

数组类型和类型之间的转换

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

NumPy 数值类型是 numpy.dtype对象的实例,每个对象都具有独特的特征。可以使用 numpy 顶级API中的标量类型创建具有指定 dtype 的数组,例如numpy.bool、numpy.float32 等

这些标量类型作为许多 numpy 函数或方法接受的 dtype 关键字的参数。例如:

z = np.arange(3, dtype=np.uint8)
print("z vale: {0} type: {1} element type: {2}".format(z, type(z), type(z[0])))

显示输出

z vale: [0 1 2] type: <class 'numpy.ndarray'> element type: <class 'numpy.uint8'>

数组类型也可以通过字符代码引用,例如:

arr1 = np.array([1, 2, 3], dtype='f')
arr2 = np.array([1, 2, 3], dtype='d')
print("arr1 val: {0}, type: {1} element type: {2}".format(arr1, type(arr1), type(arr1[0])))
print("arr2 val: {0}, type: {1} element type: {2}".format(arr2, type(arr2), type(arr2[0])))

显示输出

arr1 val: [1. 2. 3.], type: <class 'numpy.ndarray'> element type: <class 'numpy.float32'>
arr2 val: [1. 2. 3.], type: <class 'numpy.ndarray'> element type: <class 'numpy.float64'>

如果要转换数组的类型,可以使用 .astype() 方法。例如:

z = np.arange(3, dtype=np.uint8)
d = z.astype(np.float64)
d2 = z.astype(float)
print("z val: {0} type: {1} element type: {2}".format(z, type(z), type(z[0])))
print("d val: {0} type: {1} element type: {2}".format(d, type(d), type(d[0])))
print("d2 val: {0} type: {1} element type: {2}".format(d2, type(d2), type(d2[0])))

显示输出

z val: [0 1 2] type: <class 'numpy.ndarray'> element type: <class 'numpy.uint8'>
d val: [0. 1. 2.] type: <class 'numpy.ndarray'> element type: <class 'numpy.float64'>
d2 val: [0. 1. 2.] type: <class 'numpy.ndarray'> element type: <class 'numpy.float64'>

上述代码中,d2使用 Python float 对象作为数据类型,而不是 numpy.float64。
NumPy 知道 int 指的是 numpy.int_,bool 指的是 numpy.bool,float 指的是 numpy.float64,complex 指的是 numpy.complex128。其他数据类型没有 Python 等效项。

要确定数组的类型,可以直接使用数值对象的dtype属性:

z = np.array([1,2,3], dtype=int)
d = z.astype('d')
print("z val: {0} type: {1}".format(z, z.dtype))
print("d val: {0} type: {1}".format(d, d.dtype))

显示输出

z val: [1 2 3] type: int64
d val: [1. 2. 3.] type: float64

数值数据类型

有 5 种基本数值类型,

  • bool,布尔值
  • int,整数
  • uint,无符号整数
  • float,浮点
  • complex,复数

基本数字类型名称与数字位数相结合定义了具体类型。位数是在内存中表示单个值所需的位数。例如,numpy.float64 是 64 位浮点数据类型。某些类型,例如 numpy.int_ 和 numpy.intp,具有不同的位数,具体取决于平台,例如 32 位与 64 位 CPU 架构。

字符串和字节的数据类型

除了数字类型之外,NumPy 还支持下列类型

  • numpy.str_,U 字符代码,存储 unicode 字符串。
  • numpy.bytes_,S 字符代码)存储以 null 结尾的字节序列。
  • numpy.void,V 字符代码。

以上都是固定宽度的数据类型。它们通过宽度,以字节或 unicode 点为单位,进行参数化,数组中的单个数据元素必须适合该宽度。这意味着使用此数据类型存储字节序列或字符串数​​组需要提前了解或计算最长文本或字节序列的大小。

例如,我们可以创建一个数组来存储单词“hello”和“world!”:

t1 = np.array(["hello", "world!"])
print("val: {0}  type: {1}".format(t1, t1.dtype))

显示输出

val: ['hello' 'world!']  type: <U6

这里,数据类型被检测为 unicode 字符串,其长度最多为 6 个代码点,足以存储两个条目而不被截断。如果我们指定更短或更长的数据类型,则字符串将被截断或补零,以适合指定的宽度:

t1 = np.array(["hello", "world!"], dtype="U5")
t2 = np.array(["hello", "world!"], dtype="U7")print("val: {0}  type: {1}".format(t1, t1.dtype))
print("val: {0}  type: {1}".format(t2, t2.dtype))

显示输出

val: ['hello' 'world']  type: <U5
val: ['hello' 'world!']  type: <U7

对t1,最大长度为5, 所以字符!被截断。

如果我们使用 bytes 数据类型,并要求 NumPy 打印出数组缓冲区中的字节,我们可以更清楚地看到零填充:

t1 = np.array(["hello", "world"], dtype="S5").tobytes()
t2 = np.array(["hello", "world!"], dtype="S6").tobytes()
t3 = np.array(["hello", "world!"], dtype="S7").tobytes()print("t1 val: {0}, type: {1} ".format(t1, type(t1)))
print("t2 val: {0}, type: {1} ".format(t2, type(t2)))
print("t3 val: {0}, type: {1} ".format(t3, type(t3)))
t1 val: b'helloworld', type: <class 'bytes'>
t2 val: b'hello\x00world!', type: <class 'bytes'>
t3 val: b'hello\x00\x00world!\x00', type: <class 'bytes'>

\x00是填充字节。

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

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

相关文章

【Kuberntes】k8s权限管理

文章目录 权限管理概述核心概念配置RBAC创建Role和ClusterRole创建RoleBinding和ClusterRoleBinding 默认角色和角色绑定权限的实现注意事项 如何在 Kubernetes 中实现 RBAC 的细粒度权限控制&#xff1f;1. Role和ClusterRole2. RoleBinding和ClusterRoleBinding3. 配置RBAC4.…

gaussdb 基础管理 数据库 表 用户 模式 权限 存储过程

数据库database #创建数据库&#xff0c;指定字符集UTF8&#xff0c;缺省情况下新数据库将通过复制标准系统数据库template0来创建&#xff0c;且仅支持使用template0来创建。 CREATE DATABASE devdb ENCODING UTF8 template template0; CREATE DATABASE testdb; 标识符的命名…

Faster R-CNN模型微调检测航拍图像中的小物体

1. 项目简介 本项目的目标是基于Faster R-CNN模型对航拍图像中的小物体进行检测和识别。航拍图像通常具有视角广、分辨率高、小目标密集且物体尺寸较小的特点&#xff0c;因此检测难度较大。传统的目标检测模型在处理小物体时&#xff0c;容易受到物体尺寸、分辨率及背景复杂度…

HTML DOM 简介

HTML DOM 简介 1. 什么是HTML DOM? HTML DOM(文档对象模型)是一种用于HTML的应用程序编程接口(API)。它定义了访问和操作HTML文档的标准方法,将HTML文档表示为树结构,其中每个节点都是文档中的一个对象。通过DOM,开发者可以轻松地添加、删除和修改页面上的元素和内容…

CMake与Qt4/Qt5的结合使用指南

CMake与Qt4/Qt5的结合使用指南 一、同时使用Qt 4和Qt 5二、Qt构建工具2.1 AUTOMOC2.2 AUTOUIC2.3 AUTORCC 三、<ORIGIN>_autogen目标四、Visual Studio生成器五、Windows上的qtmain.lib六、其他文章推荐 在CMake中&#xff0c;您可以方便地找到并使用Qt 4和Qt 5库。Qt 4库…

大数据查询引擎之Tez

Apache Tez 是一个用于大数据处理的分布式计算框架&#xff0c;旨在提高 Hadoop 的 MapReduce 计算引擎的效率和性能。它是一个面向 DAG&#xff08;有向无环图&#xff09;任务执行的框架&#xff0c;主要用于大规模数据处理场景中&#xff0c;特别是在 Apache Hadoop 生态系统…

elementUI,设置日期,只能选择过去的和今天的日期

在 el-date-picker 组件中加&#xff1a;:picker-options"pickerOptions" <el-form-item label"票据生成日期&#xff1a;"> <el-date-picker v-model"date1" type"daterange" range-separator"至" value-format&…

Java中的函数式接口

在Java 8及以后的版本中&#xff0c;函数式编程成为了一个重要的特性。函数式接口是实现函数式编程的基础&#xff0c;它们允许你以声明式的方式处理数据集合&#xff0c;简化代码&#xff0c;提高代码的可读性和可维护性。本文将深入探讨Java中的函数式接口&#xff0c;包括它…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

轻量级可视化数据分析报表,分组汇总表!

什么是可视化分组汇总表&#xff1f; 可视化分组汇总表&#xff0c;是一种结合了数据分组、聚合计算与视觉呈现功能的数据分析展示功能。它能够按照指定的维度&#xff08;如时间、地区、产品类型等&#xff09;对数据进行分组&#xff0c;还能自动计算各组的统计指标&#xf…

【力扣 | SQL题 | 每日4题】力扣1164,3293,1308,1270

4 mid&#xff0c;四题都比较简单&#xff0c;没什么难度。 1. 力扣1164&#xff1a;指定日期的产品价格 1.1 题目&#xff1a; 产品数据表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_p…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…

SQL Injection | SQL 注入 —— 报错盲注

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;报错盲注 —— 理论篇 报错盲注&#xff08;Error-Based Blind SQL Injection&#xff09;是一种常见的 SQL 注入技术&#xff0c;适用于那些页面不会直接显示后端处理结果的查询方式…

安装nginx实现多ip访问多网站

关闭防火墙并停selinux&#xff1a; 挂载&#xff1a; 安装nginx&#xff1a; 判断nginx是否成功启动&#xff1a; 打开nmtui并添加多个ip&#xff1a; 重启nmtui&#xff1a; 查看多ip是否配置成功: 配置文件&#xff1a; 创建文件&#xff1a; 根据配置在主机创建数据文件&a…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十一)ESKF中融合速度观测量;发散的原因;如何解决发散;以及对slam的理解

带着问题去学习: 1、slam发散的原因? 2、如何解决/限制发散? 3、如何在已经有观察值和预测值的ESKF中,再引入一个其他其他观察量? 一、多传感器融合的思考——轮速计 反思为何需要融合多个传感器? 我认为根本上的原因,是因为有些传感器在某些场景下会失灵、效果不佳…

aws(学习笔记第七课) 私有子网使用NAT服务器

aws(学习笔记第七课) AWS的私有子网使用NAT服务器 学习内容&#xff1a; AWS的私有子网使用NAT服务器 1. AWS的私有子网使用NAT服务器 在上面的例子的网络构成图中&#xff0c;可能会发现一个问题。就是Private Subnet的Apache server无法访问互联网。比如&#xff0c;当需要…

云计算-----单机LNMP结构WordPress网站

LNMP结构 博客网站 day1 小伙伴们&#xff0c;LNMP结构在第一二阶段浅浅的学习过&#xff0c;这里我们可以离线部署该结构。L指&#xff08;虚拟机&#xff09;服务器&#xff0c;nginx&#xff08;前端代理服务器&#xff09;mysql数据库&#xff0c;最后基于php建设动态…

spark和hadoop、hive是什么关系

目录 1. 通俗解释**Hadoop 是什么&#xff1f;****Hive 是什么&#xff1f;****Spark 是什么&#xff1f;****他们怎么一起工作&#xff1f;** 2. spark和hadoop、hive的关系&#xff08;技术解释&#xff09; 1. 通俗解释 想象一下你有一个超级大书柜&#xff0c;这个书柜里装…

DockerCompose快速部署Java项目、nginx前端和mysql数据库到centos虚拟机

简介&#xff1a;整理自&#xff1a;SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09;课程的飞书文档。 DockerCompose介绍 大家可以看到&#xff0c;我们部署一个简单的java项…

黑马程序员Java笔记整理(day03)

1.switch 2.for与while对比 3.嵌套定义,输出的区别性 4.break与continue 5.随机数生成的两种方式 6.Random 7.随机验证码