学习视频在这里,本人只是根据视频学习并整理了文案
【Python Numpy】 https://www.bilibili.com/video/BV1jE411F79F/?share_source=copy_web&vd_source=9e37a6816bfbb7cba5e37089f419bcda
导入numpy模块 准备工作
Import numpy as np
创建数组
Array 创建&arange 创建 asarray创建
A=np.array([1,2,3,4]) 一维数组
B=np.array([1,2],[2,3],[3,4]) 二维数组
C=np.array([1,2,3],[4,5,6],[7,8,9]]]) 三维数组{类似于说有多张纸}
array(创建数组,dtype= 设置创建数组里的类型,ndim= 返回的是数组的维度,返回的只有一个数,该数即表示数组的维度 比如说:输入3,创建3维 )
range(start,end,step) 默认从0开始 步长为1
a=np.arange( start,stop,step,dtype ) 类比range
a=np.random.randint( , ,size= ) 前两个空格代表从几到几之间的整数(建立二维方便)
numpy.asarray( , dtype, order) 第一空可以填列表[] 元组()
随机数创建
a=np.random.random(size=()) 一维数组 随机生成[0.0,1.0)的数字
关于size 内: 填单一数字:一维数组
填两个数字:size=(行,列)
填三个数字:size=(几个(几个n行n列),行,列)
随机整数
def randomintTest():
要对 方法进行 调用
a=np.random.randint( , ,size= ) 前两个空格代表从几到几之间的整数
调用 第一行 def randomTest()
randomTest() 【为什么要调用? 调用的方式是?】
dtype的使用 dtype=np.int(32/64) 一般默认 不设置【32 64 代表了什么】
正态分布 randn函数返回的样本具有标准正态分布
a=np.random.randn(4) 创建一维数组 四个数
标准正态分布 方差为1 期望为0
创建指定期望和方差的正态分布
normal(loc 指定期望,scale指定方差,size) 默认为标准正态分布
nidm 数组维度 1 2 3
shape 数组的维度 对于矩阵 行列 一维的时候输出为元组如(4,)
size数组元素总个数 shape中的行*列
itemsize 每个元素所占的字节
其他方式创建
zeros(shape,dtype,order) 默认为浮点数 全为0.
a=np.zeros((5,),dtype=int)
ones 同上 全为1.
empty 创建的数组里面的元素是之前内存的值 【不明白】
linspace创建等差数列
np.linspace( start,stop,num=50(默认),endpoint=Ture(有结尾,false没有最后一个数字),retstep,dtype)
logspace创建等比数列
a=np.logspace(start,stop,num,endpoint,base,dtype)
base对数log底数 即start和stop的指数 即公比 默认的为10.0
切片和索引
一维
索引访问 a[ ] 括号内填位置
切片 [start:stop:step]
反向获取[::-1]
二维
转化形状 reshape(行,列) 例: b=a.reshape(4,6)
索引访问 a[ ] [ ] 括号内填位置,按照先行后列
切片 [start:stop:step,start:stop:step]先行后列,中间用逗号隔开 可以省略步长
使用坐标获取 a[(2,3),(2,0)] (逗号前面把所有行数字放在一起,逗号后面所有列数字放在一起,实例真实的坐标是(2,2)(3,0)) 如果只是一个,可以a[1,2]
取出来直接print为数字,需要输出[ ]模式要写print(np.array([a[1,2],a[2] [0]]))
布尔索引 a=np.array([np.nan,]) 【意义是什么?】
print(a[a>5]) 意思为元素中大于5的可以输出
print a[~np.isnan(a)] ~(取补运算符)
数组的复制
a[1] [2]= 可以这样直接更改数组的元素
直接修改复制给新变量的a1中的元素,a中元素也会被修改
a1=np.copy(a[ :, :]) 深拷贝 修改a1不影响a中的元素
修改数组的维度
转化形状 reshape(行,列) 例: b=a.reshape(4,6)
或者np.reshape(原数组,( )) b=np.reshape(a,( , ))
多维变为一维
a=b.reshape(元素个数 )
a=b.reshape(-1)
a=b.ravel() 左边两种都可以
a=b.flatten()
数组的拼接
水平数组组合
np.hstack([a,b]) a,b为两个数组 亦可以写作 hstack((a,b))
垂直拼接
np.vstack((a,b))
concatenate 连接沿现有轴的数组序列
np.concatenate((a,b),axis=) axis默认为0 是垂直方向的
二维数组有两个轴 0或1 1为水平方向拼接,相当于hstack
三维数组有三个轴 0 1 2 形状要相同才能拼接
数组的分割 == ==
split(ary,indices or sections,axis)
ary:被分割的数组
第二空: 传递整数:将原数组平分为n份
传递数组分割 按照位置分割 b=np.split(a,[3,5]) 则为0-3为一份,4-5为一份,5之后为一份
a=np.arange(1,13)
r,w,k=np.split(a,[2,3],axis=0) 看不懂
水平
np.hsplit(a,)
垂直
np.vsplit(a,)
数组的转置
a=np.arange( , ).reshape( , )
行成为列 列成为行 a[m] [n] 变成a[n] [m]
1 b=a.transpose()
2 .T a.T
3 b=np.transpose(a)
对于三维进行转置,默认将首位和某位数字交换
b=np.transpose( , , ) 0,1,2代表原来的顺序 将三个位置不同填写可以获得转置 例如(1,2,0)将原本在0位置上的数换到第三个位置上
函数
补充:广播 把较小的数组扩展补充到较大数组的形状 类比Excel表格
算数函数
加法 1 np.add(a,b)
2 a+b
减法
y=np.empty(( , ),dtype=np.int)
np.multiply(a,乘的数字或者数组,out=y)
np.sin() 三角函数
np.around(a) 四舍五入
np.ceil(a) 全都入向上取整
np.floor(a) 全都舍向下取整
聚合函数
sum求和 prod 所有元素相乘 mean 平均值
std标准差 var方差 median中数 power幂运算 sqrt开方
min最小值 max 最大值 argmin最小值的下标
argmax最大值的下标 inf无穷大 exp(10以e为底数的指数)
log()对数
power(a, n,out=y[:]) 将a中每个元素计算n次幂的形式(可以是n的元素次幂) y后写存放的位置
median() 输出一维数组的中位数
median(a,axis=0) 要通过axis指定轴 0时即为每一列的中位数
数组元素的添加和删除
resize(a ,返回的新形状 ) 元素不够,重新周期性取元素
append(a,要添加的值 需要形状相同,axis ) 默认为横向添加
insert(a,obj=插入的位置,要插入的内容,axis) 如果不输入axis不传递,则数组会被展开成为一维数组 是插入一行或一列
delete() 与insert类似,不输入axis 则会被展开
unique(a,return_index, return_inverse, return_counts) 去除数组中重复的元素