Menu
CoddyTech

NumPy 类型

Coddy NumPy 基础 课程的第 7 课,共 18 课。

程序必须分配足够的空间,让定长数组能够在内部存储数据。计算机如何确定要分配多少空间?

这就要用到 dtype。每种 dtype 都有最大值和最小值,机器可以据此知道为数组中的每个单元分配多少空间。 Numpy 有很多类型。

整数类型是 n 位整数:

类型最小值最大值幂位数
np.int8-1281272**88
np.int16-32768327672**1616
np.int32-214748364821474836472**3232
np.int64-922337203685477580892233720368547758072**6464

浮点数类型:

类型
np.float16
np.float32
np.float64
np.float128

最小值和最大值太大了,我无法展示。

要亲自查看最大值和最小值,可以对整数类型使用 numpy.iinfo(<i>type</i>),对浮点数类型使用 numpy.finfo(<i>dtype</i>):

np.iinfo(np.int16).min
np.iinfo(np.int16).max

为什么要关注 dtype?

假设我们有一个数组,其中每个元素代表一间房间,房间里住着一些人。程序会记录每间房里的人数。

我们将数组设为 np.int8:

rooms = np.array([125, 3, 127], dtype=np.int8)

这里有 3 间房。每间房的人数都是 np.int8 类型。 

最后一间房里有 127 人! 

这是 np.int8 的最大值。

如果又有一个人进入那间房,会发生什么?

rooms[-1] += 1
print(rooms)

输出:

[ 125    3 -128]

看!数值从 127 变成了 -128。这不是预期的数值,所以我们需要确保使用的 dtype 适合我们的需求。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

创建一个名为 dtype_converter 的函数,接收类型的位数和一个值。

该函数返回一个 0 维的 numpy 数组(记住,0 维数组只是传入 np.array 的单个值),数组具有指定的 dtype,且值加 1。

bits 可以是以下值之一:8, 16, 32, 64

仔细查看输出,有些测试用例会溢出!

亲手试试

import numpy as np

def dtype_converter(bits, value):
    try:
        if bits == 8:
            return np.array(value+1, dtype=np.int8)
        # Write your code here
    except:
        print("Overflow:", value+1)

NumPy 基础中的所有课

自己练习: Python 在线编译器