Python 教程之 Numpy(5)—— 数据类型对象(dtype)

举报
海拥 发表于 2023/03/29 23:26:41 2023/03/29
【摘要】 每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。这意味着它为我们提供了以下信息:数据类型(整数、浮点数、Python 对象等)数据大小(字节数)数据的字节顺序(小端或大端)如果数据类型是子数组,它的形状和数据类型是什么?ndarray 的值存储在缓冲区中,可以将其视为连续的内存字节块。所以这些字节将如何被解释由 dtype...

每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。这意味着它为我们提供了以下信息:

  • 数据类型(整数、浮点数、Python 对象等)
  • 数据大小(字节数)
  • 数据的字节顺序(小端或大端)
  • 如果数据类型是子数组,它的形状和数据类型是什么?

ndarray 的值存储在缓冲区中,可以将其视为连续的内存字节块。所以这些字节将如何被解释由 dtype 对象给出。

1.构造数据类型(dtype)对象: 数据类型对象是NumPy.dtype类的一个实例,可以使用NumPy.dtype来创建。

参数:

  • obj: 要转换为数据类型对象的对象。
  • align : bool, optional 
    向字段添加填充以匹配 C 编译器为类似 C 结构输出的内容。
  • copy : bool, optional 
    创建数据类型对象的新副本。如果为 False,则结果可能只是对内置数据类型对象的引用。
# Python 程序创建数据类型对象
import numpy as np

# np.int16 被转换为数据类型对象。
print(np.dtype(np.int16))

输出:

int16
# Python 程序创建一个包含 32 位大端整数的数据类型对象
import numpy as np

# i4 表示大小为 4 字节的整数
# > 代表大端字节序,< 代表小端编码。
# dt 是一个 dtype 对象
dt = np.dtype('>i4')

print("Byte order is:",dt.byteorder)

print("Size is:",dt.itemsize)

print("Data type is:",dt.name)

输出:

Byte order is: >
Size is: 4
Name of data type is: int32

类型说明符(在上述情况下为i4 )可以采用不同的形式:

  • b1, i1, i2, i4, i8, u1, u2, u4, u8, f2, f4, f8, c8, c16, a 
       (表示字节、整数、无符号整数、浮点数、复数和 指定字节长度
        的定长字符串)****
  • int8,…,uint8,…,float16, float32, float64, complex64, complex128 
       (这次是大小)

笔记:

dtype is different from type.
# 用于区分类型和数据类型的 Python 程序。
import numpy as np

a = np.array([1])

print("type is: ",type(a))
print("dtype is: ",a.dtype)

输出:

type is:    
dtype is:  int32

2. 具有结构化数组的数据类型对象: 数据类型对象对于创建结构化数组很有用。结构化数组是包含不同类型数据的数组。可以借助字段访问结构化数组。 
字段就像为对象指定名称。在结构化数组的情况下,dtype 对象也将是结构化的。

# 用于演示字段使用的 Python 程序
import numpy as np

# 一种结构化数据类型,包含一个 16 字符的字符串(在“name”字段中)和两个 64 位浮点数的子数组(在“grades”字段中):

dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))])

# 具有字段等级的对象的数据类型
print(dt['grades'])

# 具有字段名称的对象的数据类型
print(dt['name'])

输出:

('<f8', (2,))
# Python 程序演示了数据类型对象与结构化数组的使用。
import numpy as np

dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))])

# x 是一个包含学生姓名和分数的结构化数组。
# 学生姓名的数据类型是np.unicode_,分数的数据类型是np.float(64)
x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)

print(x[1])
print("Grades of John are: ",x[1]['grades'])
print("Names are: ",x['name'])

输出:

('John', [ 6.,  7.])
Grades of John are:  [ 6.  7.]
Names are:  ['Sarah' 'John']
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。