NumPy 数据类型探索

Beginner

介绍

在本实验中,我们将介绍 Python 的 NumPy 库中的数据类型。我们将详细讲解 dtype 对象的语法及其参数。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 Notebook 标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟,直到 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时可以向 Labby 提问。实验结束后请提供反馈,我们将及时为你解决问题。

理解 NumPy dtype 对象

在 NumPy 中,数组的所有元素都是数据类型对象,也称为 NumPy dtypes。数据类型对象用于实现与数组对应的固定大小的内存

它主要为我们提供以下信息:

  • 数据的类型(例如,integerfloat 或 Python object
  • 数据的大小
  • 字节顺序(小端序或大端序)
  • 如果是结构化类型,它会告诉我们字段的名称每个字段的数据类型以及每个字段占用的内存块部分
  • 如果数据类型是子数组,它会告诉我们其形状和数据类型

创建 NumPy dtype 对象

以下是用于创建 dtype 对象的语法:

numpy.dtype(object, align, copy)

以下是上述构造函数参数的描述:

  • object: 该参数用于表示要转换为数据类型的对象。
  • align: 这是一个可选参数。它用于向字段添加填充,以匹配 C 编译器为类似 C 结构体输出的内容。该参数可以设置为任何布尔值。
  • copy: 该参数用于创建 dtype 对象的副本,也是一个可选参数。

NumPy 中的数值数据类型

NumPy 库主要提供了比 Python 更广泛的数值数据类型。下表列出了这些数值数据类型:

序号 数据类型 描述
1 bool_ 用于表示布尔值(true 或 false),存储为一个字节。
2 int_ 这是整数的默认类型,与 C 语言中的 long 类型相同,主要包含 64 位或 32 位整数。
3 intc 类似于 C 语言中的整数(C int),表示 32 位或 64 位整数。
4 intp 用于表示用于索引的整数。
5 int8 这是 8 位整数,等同于一个字节。值的范围是 -128 到 127。
6 int16 这是 2 字节(16 位)整数,范围是 -32768 到 32767。
7 int32 这是 4 字节(32 位)整数,范围是 -2147483648 到 2147483647。
8 int64 这是 8 字节(64 位)整数,范围是 -9223372036854775808 到 9223372036854775807。
9 uint8 这是 1 字节(8 位)无符号整数。
10 uint16 这是 2 字节(16 位)无符号整数。
11 uint32 这是 4 字节(32 位)无符号整数。
12 uint64 这是 8 字节(64 位)无符号整数。
13 float_ 这与 float64 相同。
14 float16 用于表示半精度浮点数。5 位用于指数,10 位用于尾数,1 位用于符号。
15 float32 用于表示单精度浮点数。8 位用于指数,23 位用于尾数,1 位用于符号。
16 float64 用于表示双精度浮点数。11 位用于指数,52 位用于尾数,1 位用于符号。
17 complex_ 这与 complex128 相同。
18 complex64 用于表示复数,其中实部和虚部分别占用 32 位。
19 complex128 用于表示复数,其中实部和虚部分别占用 64 位。

NumPy 中表示 dtype 的字符

以下是用于表示 NumPy 中 dtype 的字符列表:

  • i: 整数(integer)
  • b: 布尔值(boolean)
  • u: 无符号整数(unsigned integer)
  • f: 浮点数(float)
  • c: 复数浮点数(complex float)
  • m: 时间差(timedelta)
  • M: 日期时间(datetime)
  • O: 对象(object)
  • S: 字符串(string)
  • U: Unicode 字符串(Unicode string)
  • V: 用于其他类型的内存固定块(void)

示例

示例 1:查找数组的数据类型

我们将尝试查找包含字符串的数组的数据类型:

import numpy as np

ar1 = np.array(['chair', 'book', 'notebook'])
print(ar1.dtype)

输出:

<U8

示例 2:构建 dtype 对象

我们可以使用 numpy.dtype 函数创建一个 dtype 对象。

import numpy as np

dt1 = np.dtype(np.int64)
print (dt1)

输出:

int64

示例 3:使用数值数据类型的简短表示

在以下示例中,我们将使用数值数据类型的简短表示:

import numpy as np

a = np.dtype('i4')
print (a)

输出:

int32

示例 4:创建结构化 dtype 对象

我们将创建一个结构化数据类型并将其应用于 ndarray 对象:

import numpy as np

## 包含键和值的信息
a = np.dtype([('rollno',np.int16)])
print(a)

a = np.array([(101,),(201,),(301,)], dtype=a)
print(a)

输出:

[('rollno', '<i2')]
[(101,) (201,) (301,)]

示例 5:更改数据类型

在以下示例中,我们将通过使用 int 作为参数值将数据类型从 float 更改为 integer

import numpy as np

ar= np.array([1.1, 2.1, 3.1])

newarr = ar.astype(int)

print(newarr)
print(newarr.dtype)

输出:

[1 2 3]
int64

总结

在本实验中,我们介绍了数组中数据类型的概念。我们了解了如何使用 dtype 对象来指定值的类型、其语法以及 dtype 对象所需的参数。我们还介绍了各种数值数据类型,并通过一些示例帮助你理解。