Python Numpy
Python Numpy
1. numpy简单介绍
-
Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
-
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
-
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
numpy是个第三方库,需要先安装,打开命令行终端输入指令“pip install numpy”此限制。
2. ndarray
-
ndarray是numpy 给我们提供的一个特殊的数组对象,我们可以用ndarray表示普通的一维数组或者二维的矩阵,甚至任意维的数据。
-
并且它可以对数组中的数据进行非常高效的运算,比如用作数据统计、图像处理、线性代数、傅里叶变换等等。
-
numpy的所有数据都是围绕数组进行的,所以我们首先需要将计算的数据表示成数组的形式。
首先需要导入numpy这个库。
import numpy as np
2.1 ndarray的一些属性
属性名字 | 属性解释 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中元素的数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
2.2 创建数组
- np.array() 直接创建
a = np.array([[1,2,3],[4,5,6]])
a
array([[1, 2, 3],
[4, 5, 6]])
a.shape
(2, 3)
a.ndim
2
a.size
6
a.dtype
dtype('int32')
3. 数组的初始化
3.1 生成0数组和1数组
- np.ones()
- np.zeros()
a = np.ones([5])
a
array([1., 1., 1., 1., 1.])
a = np.ones([4,6])
a
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
a = np.zeros([5])
a
array([0., 0., 0., 0., 0.])
3.2 从现有数组生成
3.2.1 生成方式
- np.array(object,dype)
- np.asarray(object,dtype)
3.2.2 关于array和asarray的不同
a = np.array([[1,2,3],[4,5,6]])
a1 = np.array(a)
a2 = np.asarray(a)
a
array([[1, 2, 3],
[4, 5, 6]])
a1
array([[1, 2, 3],
[4, 5, 6]])
a2
array([[1, 2, 3],
[4, 5, 6]])
a[1,1] = 500
a
array([[ 1, 2, 3],
[ 4, 500, 6]])
a1
array([[1, 2, 3],
[4, 5, 6]])
a2
array([[ 1, 2, 3],
[ 4, 500, 6]])
a2[0,0] = 100
a2
array([[100, 2, 3],
[ 4, 500, 6]])
a
array([[100, 2, 3],
[ 4, 500, 6]])
3.3 生成规律分布的数组
- np.arange(start,stop, step, dtype) //指定步长的等差数组
- start:序列的起始值,默认为0
- stop:序列的终止值
- step:步长,默认值为1
- np.linspace (start, stop, num, endpoint) //指定数量的等差数组
- start:序列的起始值,默认为0
- stop:序列的终止值
- num:要生成的等间隔样例数量,默认为50
- endpoint:序列中是否包含stop值,默认为ture
- np.logspace(start,stop, num) //指定数量的等比数列
a = np.arange(0,10,2)
a
array([0, 2, 4, 6, 8])
a = np.linspace(0,10,11)
a
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
3.4 生成随机数组
np.random模块
-
np.random.randint(low, high, size)
生成一个指定范围内的整数
-
numpy.random.uniform(low,high,size)
从一个均匀分布的范围[low,high)中随机采样(含低不含高)
import numpy as np
a = np.random.randint(40,100,(4,5))
a
array([[93, 63, 97, 55, 67],
[70, 84, 89, 95, 45],
[85, 85, 65, 67, 64],
[47, 83, 85, 53, 72]])
4. ndarray运算
4.1 数组与数的计算
- 数组的加减乘除(在numpy中称为广播)
a = np.array([1,2,3])
a = a + 1
a
array([2, 3, 4])
a = a - 1
a
array([1, 2, 3])
a = a * 2
a
array([2, 4, 6])
a = a / 2
a
array([1., 2., 3.])
4.2 数组与数组的计算
- 数组间的加减乘除
a = np.array([1,2,3])
b = np.array([4,5,6])
a
array([1, 2, 3])
b
array([4, 5, 6])
c = a + b
c
array([5, 7, 9])
c = b - a
c
array([3, 3, 3])
c = a * b
c
array([ 4, 10, 18])
c = b / a
c
array([4. , 2.5, 2. ])
4.3 特殊运算
- adarray.min() //返回最小元素
- adarray.max() //返回最大元素
- adarray.argmin() //返回最小元素所在的索引
- adarray.argmax() //返回最大元素所在的索引
- adarray.sum() //返回所有元素的总和
- adarray.mean() //返回所有元素的平均值
- adarray.median() //返回所有元素的中位数
- adarray.var() //返回数据方差
- adarray.std() //返回数据的标准方差
4.4 高级运算
- np.sqrt() //求平方根
- np.sin() //正弦
- np.cos() //余弦
- np.log() //对数
- np.power() //指数
4.5 元素筛选
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[a>2]
array([3, 4, 5, 6, 7, 8, 9])
5. 矩阵
5.1 矩阵和向量
5.1.1 矩阵
矩阵,英文matrix,和array的区别在于矩阵必须是二维的,但是array可以是多维的。
5.1.2 向量
向量,英文vector,是一种特殊的矩阵,通常是一维表示,矩阵里的一行或者一列独立出来就可以称为一个向量。
5.2 矩阵乘法
- np.matmul
- np.dot
二者都是矩阵乘法。np.matmul中禁止矩阵与标量的乘法。在矢量乘矢量的内积运算中,np.matmul与np.dot没有区别。
a = np.array([[1,2],[1,2]])
b = np.array([[3,4],[3,4]])
a
array([[1, 2],
[1, 2]])
b
array([[3, 4],
[3, 4]])
c = np.matmul(a,b)
c
array([[ 9, 12],
[ 9, 12]])
c = np.dot(a,b)
c
array([[ 9, 12],
[ 9, 12]])
c = np.matmul(a,2)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[46], line 1
----> 1 c = np.matmul(a,2)
ValueError: matmul: Input operand 1 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)
c = np.dot(a,2)
c
array([[2, 4],
[2, 4]])
6. ndarray的特殊索引
- 切片索引
列表切片是从原始列表中提取列表的一部分的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。
规则:
-
存储对象 [ start : end : step ]
-
start:: 起始索步长为正时,从首部开始;步长为负时,从尾部开始。
-
end:结束索引,步长为正时,从尾部开始;步长为负时,从首部开始。
-
step:表示步长,默认为1。步长为正时,从首部开始取值;步长为负时,从尾部开始取值。
-
a = np.arange(12)
a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
a = a.reshape(3,4)
a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
b = a[[0,2],[1,2]]
b
array([ 1, 10])