jupyter入门之numpy
安装
下载安装成功之后打开
jupyter使用
点击base(root)后的小三角(open with Jupiter notebook)
默认打开8888端口
cell每一个cell都可以放一段独立的代码, 独立运行ctrl+enter
切换cell的编辑格式 在cell的选中状态下使用y/my:code格式markdown模式
删除cellx 删除选中celldd 删除选中cell
shift+tab查看api
tab自动补全
新建文件
numpy语法
import numpy as np # 查看版本 np.__version__ # '1.14.3'
1. np.array
a1 = np.array([1,2,3,4,5]) >>> array([1,2,3,4,5]) a2 = np.array([1.0,2,3,4,5]) >>> array([1.,2.,3.,4.,5.])
2. 使用np的routines函数创建数组
-
np.ones(shape,)
n1 = np.ones(shape=5) >>> array([1., 1., 1., 1., 1.]) n2 = np.ones(shape=(3,3)) >>> array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]]) n3 = np.ones(shape=(3,3,2)) >>> array([[[1., 1.], [1., 1.], [1., 1.]], [[1., 1.], [1., 1.], [1., 1.]], [[1., 1.], [1., 1.], [1., 1.]]])
-
np.zeros
# 5行3列以0填充 n4 = np.zeros(shape=(5,3))
-
np.full
# 3行2列以6填充 n5 = np.full(shape=(3,2),fill_value=6)
-
np.eye
# 5行5列单位矩阵 np.eye(N=5)
-
np.linspace
# 0到10分为10等份 末尾不计 np.linspace(0,10,10,endpoint=False) >>> array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
-
n.arange
# start,stop,step np.arange(0,10,1) >>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
3 正态分布
# 标准正太分布 方差为1,期望为0 np.random.randn(3,2) # 普通正太分布 指定方差和期望值 np.random.normal(loc=1.75,scale=0.3,size=10)
ndarray属性
4个必记参数:
ndim:维度
shape:形状(各维度的长度)
size:总长度
dtype:元素类型
# 0-100随机 5行4列 n = np.random.randint(0,100,size=(5,4)) n.ndim >>> 2 n.shape >>> (5,4) n.size >>> 20 n.dtype >>> dtype=('int32')
ndarray基本操作
1. 索引
n1[0] # numpy特有 方便取值 n1[0,0]
2. 切片
# start:stop:step n1[0:3] # 取反 n1[::-1] # 索引2,3行,之后取索引2,3列 n2[2:4,2:4] # 索引0,1列 n2[:,:2] # 主要看第几维在变 n3[:,:,:2]
3. 变形
# 变为1维数组 n2.reshape(36) n2.reshape(36,) # 1行36列 n2.reshape(1,36) # 36行1列 n2.reshape(36,1)
4. 级联
np.concatenate() 级联需要注意的点:
级联的参数是列表:一定要加中括号或小括号
维度必须相同
形状相符
【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
可通过axis参数改变级联的方向
np.concatenate((n1,n2),axis=1)
h:horizontal 横向 v:vertical 纵向
np.hstack与np.vstack水平级联与垂直级联,处理自己,进行维度的变更
5.切分
与级联类似,三个函数完成切分工作:
np.split
np.vsplit
np.hsplit
# 1.如果indices_or_sections设置为整数,必须保证在切割的维度上是可以被这个整数整除的 # 2.如果是1-D array,[m,n] 意味着按照如下方式切割 [0:m] [m:n] [n:] result = np.split(n,indices_or_sections=3,axis=1)
6.副本
# 浅拷贝 不会修改n1的值 cn = n1.copy()
ndarray聚合操作
求和 np.sum
标准差 np.std()
np.nan
最大最小值 np.max/np.min
其他运算
Function Name NaN-safe Version Description np.sum np.nansum Compute sum of elements np.prod np.nanprod Compute product of elements np.mean np.nanmean Compute mean of elements np.std np.nanstd Compute standard deviation np.var np.nanvar Compute variance np.min np.nanmin Find minimum value np.max np.nanmax Find maximum value np.argmin np.nanargmin Find index of minimum value np.argmax np.nanargmax Find index of maximum value np.median np.nanmedian Compute median of elements np.percentile np.nanpercentile Compute rank-based statistics of elements np.any N/A Evaluate whether any elements are true np.all N/A Evaluate whether all elements are true np.power 幂运算
ndarray的矩阵操作
1. 加减乘除
2. 矩阵积np.dot()
n3 = np.array([[1,2],[3,4]]) np.dot(n3,n3) >>> array([[ 7, 10], [15, 22]])
3. 广播机制(重点)
【重要】ndarray广播机制的两条规则
规则一:为缺失的维度补1
规则二:假定缺失元素用已有值填充
# 计算一个数组中每个元素与平均值的差 n1 = np.random.randint(0,100,size=10) n1-n1.mean() # axis=1求每一行的平均值 n2.mean(axis=1).reshape((-1,1)) # 求每一行的每一个元素与该行的平均值的差 n2 - n2.mean(axis=1).reshape((-1,1))
1. 快速排序
np.sort()与ndarray.sort()都可以,但有区别:
np.sort()不改变输入
ndarray.sort()本地处理,不占用空间,但改变输入
2. 部分排序
np.partition(a,k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
当k为正时,我们想要得到最小的k个数
当k为负时,我们想要得到最大的k个数