Numpy

一、ndarray对象

\quad Numpy(Numerical Python)是一个开源的python科学计算库,用于快速处理任意维度的数组,支持常见的数组和矩阵操作。Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
\quad ndarray是一个n维数组类型(n-dimensional),描述了相同类型的元素的集合。python中可以用list,tuple等数据结构表示数组,元素类型可不同,嵌套可以实现多维数组。但是ndarray相比于list等类型运算效率更高。
ndarray与list效率对比
\quad 在存储数据时,ndarray数据与数据的地址都是连续的,这样使得批量操作数组元素时速度更快,而list存储的数据地址不是连续的,需要通过寻址方式找到,这与ndarray的元素类型相同而list的元素类型可不同的区别相符。
\quad 此外,numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算;Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。

二、数组的创建

在这里插入图片描述

1.array() ,asarray() 利用list,tuple对象或已有的ndarray数组创建
在这里插入图片描述
在这里插入图片描述
注意array与asarray的区别
np.array(ndarray对象)为深拷贝
np.asarray(ndarray对象)为浅拷贝
在这里插入图片描述

注意
在这里插入图片描述

2.特殊数组的创建
np.zeros(shape,dtype),np.zeros_like(object, dtype)全0数组,
np.ones(shape,dtype),np.ones_like(object, dtype)全1数组。
np.eye(m,n,k=0)对角线k为1的m×n的单位矩阵,省略n时为m阶方阵
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.生成固定范围的数组
np.arange(start,end,step,dtype)创建等差数列
参数start,end为始,终(不包括),step为步长

np.linspace(start,end,num,endpoint)创建等差数列
参数num为等间隔数据的个数(默认50),endpoint为数组是否包含end值(默认True)
np.logspace(start,stop,num)创建等比数列

在这里插入图片描述
4.生成随机数组np.random模块
1)正态分布
np.random.randn(d1,d2,d3,...,dn)生成shape为(d1,…,dn)的随机数组。
np.random.normal(loc=0.0,scale=1.0,size=None)生成shape为size的随机数组
loc为概率分布对应的均值,scale为标准差,size为int(相当于tuple (int,)得到一维数组 ,注意不是(1,int)二维)或tuple of ints,默认为None,即只返回一个(相当于int=1)。
np.random.standard_normal(size=None)生成指定size的服从标准正态分布的随机数组

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
y=[np.random.normal(80,5) for i in range(1000000)]
plt.figure()
plt.hist(y,bins=1000)
plt.show()

在这里插入图片描述
2)均匀分布
np.random.rand(d1,...,dn)生成shape为(d1,…,dn)的数组
np.random.uniform(low=0.0,high=1.0,size=None)生成概率分布服从U[low,high)均匀分布的数组,shape为size
np.random.randint(low,high=None,size=None,dtype='I')生成服从均匀分布的整数数组,当high不为None时为U[low,high),否则为U[0,low),注意元素是整数。
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
y=[np.random.uniform(60,100) for i in range(1000000)]
plt.figure()
plt.hist(y,bins=1000)
plt.show()

在这里插入图片描述

三、数组的属性

shape,数组维度的元组 eg (1,)一维,(2,3)二维,(1,2,3)三维
dtype数组元素的类型
ndim数组的维度
size数组的元素数量(和上文函数的参数size不是一个东西)
itemsize一个数组元素的长度(字节)
在这里插入图片描述
在这里插入图片描述

四、数组的索引和切片

\quad 高维和一维类似,n维数组可以使用1~n个索引来获取子数组,每个维度也都可以使用切片。以一维数组进行说明
1. 索引值从0开始
在这里插入图片描述
在这里插入图片描述

2. 有和列表类似的切片,切割一维数组的元素
\quad 使用切割运算符,从原始数组中切割出所需的子数组 array[start: end:step] ,其中冒号分隔的是范围和增量,获取到从索引start开始到end(不包括end)间的元素。
如果step>0的省略start则从0开始,省略end,则到最后一个元素;
在这里插入图片描述

\quad 如果step<0的,省略start从-1开始,省略end到0;如果没有step,则增量为1。如果start到end的方向与step矛盾,则返回[ ]
在这里插入图片描述

3. 使用复杂索引获取数组元素
①不仅可以用单个整数值索引来获取元素,还可以给定一个索引列表,获取元素构成新的数组
②使用布尔值屏蔽索引
建立与数组相同形状的布尔数组作为索引,布尔数组元素是True则选择对应的元素,False就不选
在这里插入图片描述

五、相关函数

1.形状修改
在这里插入图片描述
在这里插入图片描述

2.类型修改
在这里插入图片描述
3.取整
在这里插入图片描述
4.统计相关函数
在这里插入图片描述

5.其他
去重np.unique()
在这里插入图片描述
深复制np.copy()
在这里插入图片描述
连接数组np.concatenate().
在这里插入图片描述
三角函数np.sin(),np.cos(),np.tan().
在这里插入图片描述

六、数组间的运算

\quad 涉及的函数大多数除了适用于数组,也适用于列表,元组,数值类型等,但是主要应用于数组。
1.关系运算
在这里插入图片描述

2.通用判断函数
np.all(),np.any()

在这里插入图片描述
3.三元运算符np.where
在这里插入图片描述

4.逻辑运算
在这里插入图片描述
5.算术运算

首先明确数组进行算术运算的规则
1. shape相同(同型),对应元素进行运算
2. shape不同,numpy数组广播可以让较小数组扩充到与较大数组相同shape,对应元素进行运算。

广播规则如下:
1) 要求数组是兼容的
兼容的情况:
①数组是相同形状的(同型);
②shape不一样但是ndim一样(同维度数),每一个维度尺寸要么相同要么为1;
③shape不一样且ndim不一样,广播时,较少维度的数组会改变形状,追加维度(往外加一维,即shape往前加元素)且尺寸为1,以便两个数组维度相同,增加维度后的数组,若满足情况②则兼容;

2) 若数组不同维(ndim)不一样,则给低维的数组最加维度,尺寸为1.例如:数组a的形状(4,3),二维;数组b的形状(3,)一维,则将一维数组b扩成二维数组(1,3),注意是往前加一维,而不是往后;

3) 当数组某一维尺寸为1时,其他数组该维大于1时,则尺寸为1的数组会沿着该维复制扩充数组尺寸;

4) 数组在每一维的尺寸是两个数组中的较大值。例如:a是(4,3),b是(1,3)则广播后的数组b的尺寸(当然这是个中间变化,b指向的对象没有变)是(4,3)。
在这里插入图片描述
6.遍历
在这里插入图片描述

七、向量与矩阵

\quad 向量与矩阵是特殊的数组,向量为一维数组,矩阵为二维数组,它们具有数组的通用性质,线代/高代里的矩阵乘法需要借助np.dot()np.matmul()来完成。
在这里插入图片描述
在这里插入图片描述

八、加载和存储文件数组

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yun_gao_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值