Numpy是python科学计算的基础包,它提供以下功能:
- 快速高效的多维数组对象ndarray
- 用于对数组执行元素级计算以及直接对数组执行数学运算的函数
- 用于读写硬盘上基于数组的数据集的工具
- 线性代数运算、傅里叶变换,以及随机数生成
- 用于将C、C++、Fortran代码集成到python的工具
一、基础
1 | import numpy as np |
1 | # python list方法生成数据 |
1 | # 二维数据访问 |
1 | # 根据数组创建np对象 |
1 | # np访问 |
1 | # np数组切片 |
1 | a1=np.arange(15).reshape(3,5) |
1 | # 数组的dimentsions,对应matrix的rows和columns |
1 | # 数组的维度dimensions数量,numpy也叫axes,线性代数中矩阵的秩 |
1 | # 元素的type |
1 | # 元素的type名 |
1 | # 每个元素的字节数 |
1 | # 元素总数 |
1 | type(a1) |
1 | b1=np.arange(6) |
1 | print(b1) |
二、数组创建
1 | # array创建,参数为数组 |
1 | type(a2) |
1 | a2.dtype |
1 | b2=np.array([(1.5,2,3),(4,5,6)]) |
1 | # 元素中有float |
1 | b2.size |
1 | b2.itemsize |
1 | # 创建复数,包括实数和虚数 |
1 | # 特定方法,参数为shape,一维:2,二维:(3,4),三维:(2,3,4) |
1 | d2.itemsize |
1 | e2=np.ones((2,3,4),dtype=np.int32) |
1 | f2=np.full((2,3),3.14) |
1 | g2=np.full_like(f2,3.2,dtype=np.float) |
1 | h2=np.empty((2,3)) |
1 | # arange函数,设置开始、结束和步长。linspace函数,设置开始、结束和数量 |
1 | k2=np.arange(0,2,0.3) |
1 | l2=np.linspace(0,2,9) |
1 | n2=np.eye(5) |
三、基本运算
1 | a4=np.array([20,30,40,50]) |
1 | b4=np.arange(4) |
1 | # 元素相减 |
1 | a4+10 |
1 | b4**2 |
1 | 10*np.sin(a4) |
1 | np.any(a4>30) |
1 | np.all(a4>20) |
1 | a4<35 |
1 | c4=np.array([[1,1],[0,1]]) |
1 | d4=np.array([[2,0],[3,4]]) |
1 | # 排序 |
1 | d4.sort(axis=1) |
1 | # 矩阵操作 |
1 | # 元素乘 |
1 | # 矩阵乘 |
1 | # 矩阵乘 |
1 | # 一维操作 |
1 | sum(e4) |
1 | e4.sum() |
1 | e4.min() |
1 | e4.max() |
1 | # 轴操作 |
1 | f4.sum(axis=0) |
1 | np.sum(f4) |
1 | f4.sum(axis=1) |
1 | f4.cumsum(axis=1) |
1 | #比较sum和np.sum的执行效率 |
1 | %timeit sum(n) |
1 | #np执行效率高 |
四、通用函数
1 | b=np.arange(3) |
1 | np.exp(b) |
1 | np.sqrt(b) |
1 | c=np.array([2,-1,4]) |
1 | np.add(b,c) |
1 | b+c |
五、索引、切片和迭代(Indexing, Slicing and Iterating)
一维数组
1 | a=np.arange(10)**3 |
1 | a[2] |
1 | a[2:5] |
1 | # 等同于a[0:6:2] = -1000;从0到第6个元素,步长为2 |
1 | # 元素倒序 |
1 | for i in a: |
多维数组
1 | def f(x,y): |
1 | b=np.fromfunction(f,(5,4),dtype=int) |
1 | b[2,3] |
1 | b[0:5,1] |
1 | b[:,1] |
1 | b[0:2,:] |
1 | b[0:2,0:2] |
1 | b[0:2][0:2] |
1 | #迭代 |
1 | for ele in b.flat: |
六、Array shape
1 | a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) |
1 | a.ravel() |
1 | # 如果为-1,会自动计算,等同于a.reshape(6,2) |
1 | # 转置 |
1 | # reshape和转置后,a本身没有变化 |
1 | # reshape返回新的array,resize修改array自身。如需要修改自身,也可直接使用shape属性,等同于a.shape=(6,2) |
七、Array stack together
1 | a=np.array([[1,2],[3,4]]) |
1 | b=np.array([[5,6],[7,8]]) |
1 | np.concatenate((a,b),axis=0) |
1 | np.concatenate((a,b),axis=1) |
1 | np.vstack((a,b)) |
1 | np.hstack((a,b)) |
八、Array splitting
1 | a=np.array([[1,2,3,4,5,6,7,8,9,10,11,12],[21,22,23,24,25,26,27,28,29,30,31,32]]) |
1 | # 按列3等分 |
1 | # 从第三和第四列分割 |
九、Copies and Views
1、直接复制,引用指向相同
1 | a=np.arange(12) |
1 | b=a |
1 | b is a |
1 | b.shape= (3,4) |
1 | a.shape |
2、view,变更shape不影响,修改值会影响
1 | c=a.view() |
1 | c is a |
1 | c.base is a |
1 | c.shape=(2,6) |
1 | a.shape |
1 | c[0,4]=1234 |
1 | a |
3、copy,变更shape和修改值都不会影响
1 | d=a.copy() |
1 | d is a |
1 | d.base is a |
1 | d[0,0]=9999 |
1 | a |
十、Indexing with Arrays of Indices
1 | a=np.arange(12)**2 |
1 | i=np.array([1,1,3,5,8]) |
1 | a[i] |
1 | j=np.array([[3,4],[5,6]]) |
1 | a[j] |
1 | a=np.arange(12).reshape(3,4) |
1 | i=np.array([[0,1],[1,2]]) |
1 | j=np.array([[2,1],[3,3]]) |
1 | a[i,j] |
1 | a[i,2] |
1 | a=np.arange(5) |
1 | a[[0,0,2]]=[1,2,3] |
十一、Random 随机
0、random模块的随机方法
1 | import random |
1 | #生成[5,10]之间的随机整数 |
1 | #生成0-1的float数据 |
以下为np模块的random随机方法
1、numpy.random.rand(d0,d1,…,dn)
- rand函数根据给定维度生成0到1,前闭后开区间的数据,包含0,不包含1
- dn表格每个维度
- 返回值为指定维度的array
1 | np.random.rand(3,3) |
2、numpy.random.randn(d0,d1,…,dn)
- randn函数返回一个或一组样本,具有标准正态分布(standard normal distribution)。标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)。
- dn表格每个维度,当没有参数时,返回单个数据
- 返回值为指定维度的array
1 | np.random.randn() |
1 | np.random.randn(3,3) |
3、numpy.random.randint(low, high=None, size=None, dtype=’l’)
- 返回随机整数,范围区间为[low,high),包含low,不包含high
- 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
- high没有填写时,默认生成随机数的范围是[0,low)
1 | # 返回[0,1)之间的整数,所以只有0 |
1 | # 返回1个[1,5)时间的随机整数 |
1 | # 生成区间为[0,10)的随机整数 |
4、浮点数
生成[0,1)之间的浮点数
- numpy.random.random_sample(size=None)
- numpy.random.random(size=None)
- numpy.random.ranf(size=None)
- numpy.random.sample(size=None)
1 | print('--random_sample--') |
5、numpy.random.choice(a, size=None, replace=True, p=None)
- 从给定的一维数组中生成随机数
- 参数:a为一维数组类似数据或整数;size为数组维度;p为数组中的数据出现的概率
- a为整数时,对应的一维数组为np.arange(a)
1 | np.random.choice(5,3) |
1 | # 当replace为False时,生成的随机数不能有重复的数值 |
1 | np.random.choice(5,size=(3,2)) |
1 | demo_list = ['lenovo', 'sansumg','moto','xiaomi', 'iphone'] |
1 | #参数p的长度与参数a的长度需要一致; |
6、numpy.random.seed()
- 使得随机数据可预测。
- 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
1 | np.random.seed(0) |
1 | np.random.seed(1676) |
1 | np.random.seed(1676) |
十二、numpy矩阵
1 |
|