Numpy介绍
使用之前需要导入Numpy
import numpy as np
NumPy 的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在 NumPy 中,维度称为轴。 例如,3D 空间中一个点的坐标[1, 2, 1]只有一个轴。该轴有 3 个元素,因此我们说它的长度为 3。在下图中的示例中,数组有 2 个轴。第一个轴的长度为 2,第二个轴的长度为 3。
NumPy 的数组类称为ndarray。它也被称为别名 array。请注意,numpy.array这与标准 Python 库类不同array.array,后者仅处理一维数组并提供较少的功能。ndarray对象更重要的属性是:
- ndarray.ndim 数组的轴数(维度)。
- ndarray.shape 数组的维度。这是一个整数元组,象征着每个维度中数组的大小。对于具有n行和m列的矩阵,shape将为(n,m)。因此,元组shape的长度是轴的数量,ndim。
- 数组大小数组的元素总数。这等于shape元素的乘积。
- ndarray.dtype 描述数组中元素类型的对象。可以使用标准 Python 类型创建或指定 dtype。此外,NumPy 提供了自己的类型。numpy.int32、numpy.int16 和 numpy.float64 是一些示例。
- ndarray.itemsize 数组每个元素的大小(以字节为单位)。例如,一个类型元素的数组float64有itemsize8 个(=64/8),而一个类型的元素complex32有itemsize4 个(=32/8)。它相当于ndarray.dtype.itemsize。
- ndarray.data 包含数组实际元素的缓冲区。通常,我们不需要使用此属性,因为我们将使用索引工具访问数组中的元素。
NumPy 数组创建
array创建
可以使用array函数从常规 Python 列表或元组创建数组
a = np.array([1,3,11])
a
array([ 1, 3, 11])
a.shape
(3,)
a.dtype
dtype('int32')
a = np.array([[1.1,2,3],[2,4,8]])
a
array([[1.1, 2. , 3. ],
[2. , 4. , 8. ]])
a.shape
(2, 3)
a.dtype
dtype('float64')
zeros,ones创建
a = np.zeros((3,8))
a
array([[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.]])
a = np.ones((2,5))
a
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
# 指定类型
a = np.ones((4,2),dtype=np.float64)
a.dtype
dtype('float64')
arange创建
np.arange(1,3)
array([1, 2])
np.arange(1,11,3)
array([ 1, 4, 7, 10])
np.array([np.arange(1,5,0.5),np.arange(1,9)])
array([[1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5],
[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. ]])
随机数创建
#生成一个 0 到 100 之间的随机整数:
np.random.randint(100)
67
# random 模块的 rand() 方法返回 0 到 1 之间的随机浮点数。
np.random.rand()
0.8036665376544574
np.random.rand(6,3)
array([[0.14565413, 0.67196986, 0.01603824],
[0.05228213, 0.72782701, 0.47755347],
[0.62613132, 0.08992243, 0.23964293],
[0.23977211, 0.46031127, 0.22726328],
[0.83314693, 0.79064596, 0.24260102],
[0.73696135, 0.86420688, 0.86527412]])
#randint() 方法接受 size 参数,您可以在其中指定数组的形状。
np.random.randint(30,50,size = (6))
array([48, 47, 32, 33, 37, 48])
np.random.randint(44,51,size = (3,6))
array([[44, 47, 47, 46, 46, 48],
[45, 44, 48, 49, 45, 50],
[50, 46, 49, 49, 46, 50]])
#从数组生成随机数
np.random.choice([1,5,7])
7
np.random.choice([1,5,7,11,32],size = (2,3))
array([[ 5, 32, 1],
[ 1, 11, 11]])
np.random.normal()
的意思是一个正态分布,normal
这里是正态的意思。
参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布,
参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。
参数size(int 或者整数元组):输出的值赋在shape里,默认为None。
data = np.random.normal(loc=0,scale=1e-2,size=(1,13))
data
array([[-0.01127862, -0.00143676, -0.01302496, -0.01239942, -0.0120068 ,
0.01065305, 0.004626 , 0.00193842, -0.01895159, 0.01232755,
-0.00061731, -0.00216356, -0.00426709]])
数组变形reshape
a = np.array([np.arange(1,5,0.5),np.arange(1,9)])
a
array([[1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5],
[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. ]])
a.reshape(4,4)
array([[1. , 1.5, 2. , 2.5],
[3. , 3.5, 4. , 4.5],
[1. , 2. , 3. , 4. ],
[5. , 6. , 7. , 8. ]])
a.reshape(2,2,4)
array([[[1. , 1.5, 2. , 2.5],
[3. , 3.5, 4. , 4.5]],
[[1. , 2. , 3. , 4. ],
[5. , 6. , 7. , 8. ]]])
运算
a = np.array([2,3,11])
a
array([ 2, 3, 11])
b = np.arange(1,4)
b
array([1, 2, 3])
a - b
array([1, 1, 8])
# 几次方
a ** 3
array([ 8, 27, 1331], dtype=int32)
# sin
np.sin(a)
array([ 0.90929743, 0.14112001, -0.99999021])
# 大小比较
a <3
array([ True, False, False])
# 数组中按元素进行运算
a * b
array([ 2, 6, 33])
# 矩阵乘积
a = np.array([[2,3],[1,5]])
b = np.array([[1,2],[3,3]])
a
array([[2, 3],
[1, 5]])
b
array([[1, 2],
[3, 3]])
a @ b
array([[11, 13],
[16, 17]])
a.dot(b)
array([[11, 13],
[16, 17]])
#+=操作
a
array([[2, 3],
[1, 5]])
a+=1
a
array([[4, 5],
[3, 7]])
# 统计
a.max()
7
a.min()
3
a.sum()
19
np.sort(a)
array([[4, 5],
[3, 7]])
np.exp(a)
array([[ 54.59815003, 148.4131591 ],
[ 20.08553692, 1096.63315843]])
np.add(a,b)
array([[ 5, 7],
[ 6, 10]])
NumPy 索引、切片和迭代
a = np.array([[1,2,3],[4,6,9]])
a
array([[1, 2, 3],
[4, 6, 9]])
a[1]
array([4, 6, 9])
a[1][2]
9
a[1][1:3]
array([6, 9])
a[::-1]## reversed a
array([[4, 6, 9],
[1, 2, 3]])
数组类型和类型之间的转换
Numpy 类型 | C型 | 描述 |
---|---|---|
numpy.bool_ | bool | 存储为字节的布尔值(真或假) |
numpy.byte | signed char | 平台定义 |
numpy.ubyte | unsigned char | 平台定义 |
numpy.short | short | 平台定义 |
numpy.ushort | unsigned short | 平台定义 |
numpy.intc | int | 平台定义 |
numpy.uintc | unsigned int | 平台定义 |
numpy.int_ | long | 平台定义 |
numpy.uint | unsigned long | 平台定义 |
numpy.longlong | long long | 平台定义 |
numpy.ulonglong | unsigned long long | 平台定义 |
numpy.half | numpy.float16 | 半精度浮点数:符号位,5 位指数,10 位尾数 |
numpy.single | float | 平台定义的单精度浮点数:通常为符号位、8 位指数、23 位尾数 |
numpy.double | double | 平台定义的双精度浮点数:通常为符号位、11 位指数、52 位尾数。 |
numpy.longdouble | long double | 平台定义的扩展精度浮点数 |
numpy.csingle | float complex | 复数,由两个单精度浮点数表示(实部和虚部) |
numpy.cdouble | double complex | 复数,由两个双精度浮点数(实部和虚部)表示。 |
numpy.clongdouble | long double complex | 复数,由两个扩展精度浮点数(实部和虚部)表示。 |