Back_To_Home..
Numpy Floats
January 2024 (655 Words, 4 Minutes)
Numpy
NumPy是Python的一个重要的数学计算库,以下是关于NumPy的学习介绍:
安装与导入
- 安装:可以使用包管理工具
pip
进行安装,在命令行中输入pip install numpy
即可。 - 导入:在Python代码中,通常使用
import numpy as np
的方式导入NumPy,并将其别名为np
,方便后续使用。
数组创建
- 使用
array
函数:可以通过np.array()
函数将Python的列表或元组转换为NumPy数组。例如,arr = np.array([1, 2, 3, 4, 5])
创建了一个一维数组。 - 使用
zeros
、ones
等函数:np.zeros((3, 4))
创建一个形状为(3, 4)的全零数组,np.ones((2, 3))
创建一个形状为(2, 3)的全一数组。 - 使用
arange
函数:np.arange(1, 10, 2)
可以创建一个从1开始,到10结束(不包含10),步长为2的数组,即[1, 3, 5, 7, 9]
。
数组基本操作
- 形状操作
- 查看形状:通过数组的
shape
属性可以查看数组的形状,如arr.shape
。 - 改变形状:使用
reshape
方法可以改变数组的形状,例如arr.reshape(2, 3)
将一维数组arr
转换为形状为(2, 3)的二维数组。
- 查看形状:通过数组的
- 数据类型
- 查看数据类型:通过数组的
dtype
属性可以查看数组中元素的数据类型,如arr.dtype
。 - 转换数据类型:使用
astype
方法可以转换数组的数据类型,如arr.astype(np.float32)
将数组arr
中的元素转换为32位浮点数类型。
- 查看数据类型:通过数组的
数组运算
- 算术运算:NumPy数组支持各种算术运算,如加法、减法、乘法、除法等。这些运算都是元素级别的,例如
arr1 + arr2
将数组arr1
和arr2
对应元素相加。 - 矩阵运算
- 矩阵乘法:使用
dot
函数或@
运算符可以进行矩阵乘法运算,如np.dot(arr1, arr2)
或arr1 @ arr2
。 - 转置:通过数组的
T
属性可以获取数组的转置,如arr.T
。
- 矩阵乘法:使用
广播机制
当对形状不同的数组进行运算时,NumPy会尝试进行广播,将较小的数组扩展成与较大数组相同的形状。例如,一个形状为(3, 1)的数组与一个形状为(3, 4)的数组相加,形状为(3, 1)的数组会在第二个维度上进行扩展,变成(3, 4),然后再进行相加运算。
常用函数
- 数学函数:NumPy提供了许多常用的数学函数,如
np.sin()
、np.cos()
、np.exp()
、np.log()
等,这些函数可以对数组中的每个元素进行相应的数学运算。 -
统计函数
- 求和:
np.sum(arr)
计算数组arr
中所有元素的和,也可以指定轴进行求和,如np.sum(arr, axis=0)
按列求和。 - 均值:
np.mean(arr)
计算数组arr
中所有元素的均值,同样可以指定轴计算均值。 - 最大值和最小值:
np.max(arr)
和np.min(arr)
分别返回数组arr
中的最大值和最小值,也可以指定轴进行操作。
- 求和:
Floats 浮点数
https://github.com/NVIDIA/trt-samples-for-hackathon-cn/tree/master/cookbook/50-Resource
数据类型 | FP64 | FP32 | TF32 | FP16 | BF16 | FP8e5m2 | FP8e4m3 |
---|---|---|---|---|---|---|---|
符号位数 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
指数位数($k$) | 11 | 8 | 8 | 5 | 8 | 5 | 4 |
尾数位数($n$) | 52 | 23 | 10 | 10 | 7 | 2 | 3 |
最大值(最小值)
数据类型 | FP64 | FP32 | TF32 | FP16 | BF16 | FP8e5m2 | FP8e4m3 |
---|---|---|---|---|---|---|---|
最大值符号位($s_{\bar{2}}$) | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
指数位($e_{\bar{2}}$) | 11111111110 | 11111110 | 11111110 | 11110 | 11111110 | 11110 | 1110 |
尾数位($m_{\bar{2}}$) | 111…1 | 111…1 | 111…1 | 111…1 | 1111111 | 11 | 111 |
$E=2^{e}-\left(2^{k-1}-1\right)$ | $1023$ | $127$ | $127$ | $15$ | $127$ | $15$ | $7$ |
$M=\sum_{i=1}^n\frac{1}{2^{i}}$ | $1-\frac{1}{2^{52}}$ | $1-\frac{1}{2^{23}}$ | $1-\frac{1}{2^{10}}$ | $1-\frac{1}{2^{10}}$ | $1-\frac{1}{2^{7}}$ | $1-\frac{1}{2^{2}}$ | $1-\frac{1}{2^{3}}$ |
$max=\left(-1\right)^{s}2^{E}\left(1+M\right)$ | $1.798\times10^{308}$ | $3.403\times10^{38}$ | $3.401\times10^{38}$ | $65504.$ | $3.390\times10^{38}$ | $57344.$ | $240.$ |
最小值符号位($s_{\bar{2}}$) | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
$min=\left(-1\right)^{s}2^{E}\left(1+M\right)$ | $-1.798\times10^{308}$ | $-3.403\times10^{38}$ | $-3.401\times10^{38}$ | $-65504.$ | $-3.390\times10^{38}$ | $-57344.$ | $-240.$ |
绝对最小值
数据类型 | FP64 | FP32 | TF32 | FP16 | BF16 | FP8e5m2 | FP8e4m3 |
---|---|---|---|---|---|---|---|
符号位($s_{\bar{2}}$) | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
指数位($e_{\bar{2}}$) | 00000000000 | 00000000 | 00000000 | 00000 | 00000000 | 00000 | 0000 |
尾数位($m_{\bar{2}}$) | 000…01 | 000…01 | 000…01 | 000…01 | 0000001 | 01 | 001 |
$E=1-\left(2^{k-1}-1\right)$ | $-1022$ | $-126$ | $-126$ | $-14$ | $-126$ | $-14$ | $-6$ |
$M=\frac{1}{2^{n}}$ | $\frac{1}{2^{52}}$ | $\frac{1}{2^{23}}$ | $\frac{1}{2^{10}}$ | $\frac{1}{2^{10}}$ | $\frac{1}{2^{7}}$ | $\frac{1}{2^{2}}$ | $\frac{1}{2^{3}}$ |
$value=\left(-1\right)^{s}2^{E}M$ | $4.941\times10^{-324}$ | $1.401\times10^{-45}$ | $1.148\times10^{-41}$ | $5.960\times10^{-8}$ | $9.184\times10^{-41}$ | $1.526\times10^{-5}$ | $1.953\times10^{-3}$ |
其他值
数据类型 | $+\infty$ | $-\infty$ | NaN |
---|---|---|---|
符号位($s_{\bar{2}}$) | 0 | 1 | 0 或 1 |
指数位($e_{\bar{2}}$) | 全 1 | 全 1 | 全 0 |
尾数位($m_{\bar{2}}$) | 全 0 | 全 0 | 非全 0 |