NumPy 类型
Coddy NumPy 基础 课程的第 7 课,共 18 课。
程序必须分配足够的空间,让定长数组能够在内部存储数据。计算机如何确定要分配多少空间?
这就要用到 dtype。每种 dtype 都有最大值和最小值,机器可以据此知道为数组中的每个单元分配多少空间。 Numpy 有很多类型。
整数类型是 n 位整数:
| 类型 | 最小值 | 最大值 | 幂 | 位数 |
| np.int8 | -128 | 127 | 2**8 | 8 |
| np.int16 | -32768 | 32767 | 2**16 | 16 |
| np.int32 | -2147483648 | 2147483647 | 2**32 | 32 |
| np.int64 | -9223372036854775808 | 9223372036854775807 | 2**64 | 64 |
浮点数类型:
| 类型 |
| 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 适合我们的需求。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个名为 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 在线编译器