numpy基础

nunpy基本概念

1.矢量算术运算
2.复杂广播功能
3.更快速
4.更节省空间
官方文档

对象

构造

import numpy as np
data1=range(10)
# >>>常用构造
arr1=np.array(data1,dtype=np.float64)
arr2=np.arange(32).reshape(8,4)
arr3=np.random.randn(7,4)
arr4=np.empty((8,4))
for i in range(8):
  arr[i]=i
# >>>属性
arr1.ndim #维度
arr1.shape #形状
arr1.dtype #数据类型
arr1.astype(np.float64) #更改数据类型 返回新的数组
arr1.astype('f8')
arr1.astype(dtype('float64'))
arr1.astype(arr2.dtype)
# >>>运算
print(arr1+1) #广播能力
## >>>切片
arr1[5:8]=12;print(arr1) #广播能力
arr_slice=arr1[5:8];arr_slice[1]=12345;print(arr) #切片的赋值以引用方式
arr1[5:8].copy() #显示复制
arr2[0,2] #索引列表
arr2[:2,1:]

索引

# >>>布尔索引
# and和or在布尔型数组中无效
names=np.array(['A','B','C','A','B','D','E'])
arr3[names == 'B']
arr3[names == 'B',2:]
arr3[names != 'B',3]
arr3[-(names == 'B')]
arr3[(names == 'B') | (names == 'C')]=7
# >>>花式索引
arr4[[4,3,0,6]]
arr4[[-3,-5,-7]]
arr2[[1,5,7,2],[0,3,1,2]] #(1,0),(5,3),(7,1),(2,2)
arr2[[1,5,7,2]][:,[0,3,1,2]]
arr2[np.ix_([1,5,7,2],[0,3,1,2])]# 等价上一

轴转置

# 原数据视图,不复制
arr2.T
arr=np.arange(16).reshape((2,2,4))
arr.transpose((1,0,2))
arr.swapaxes(1,2)

数组创建函数

函数说明
array构造函数
asarray如果本身是ndarray则不转换
arange类似于range,返回ndarray
ones根据形状生成1数组
ones_like根据传入ndarray的形状生成全1数组
zeros根据形状生成0数组
zeros_like根据传入ndarray的形状生成全0数组
empty只分配空间,不填充任何值
empty_like只分配空间,不填充任何值
eye,identity创建正方矩形

numpy数据类型

类型代码说明
int8,uint8i1,u18位1字节
int16,uint16i2,u2
int32,uint32i4,u4
int64,uint64i8,u8
float16f2
float32f4,f
float64f8,d
float128f16,g
complex64,complex128,complex256c8,c16,c32复数
bool?
objectO
strS1字符为1字节
unicodeUz字节数由平台觉得,中文1字符为2字节
datetime64存储<class ‘pandas._libs.tslibs.timestamps.Timestamp’>

元素级数组函数

一元ufunc

函数说明
abs,fabs对于复数值fabs运算更快
sqrt计算各元素平方根,相当于arr**0.5
square计算各元素平方,相当于arr**2
exp计算各元素指数
log,log10,log2,log1p以底为e的自然对数,log(1+x)
sign计算各元素的符号,1,0,-1
ceil上舍
floor下舍
rint四舍五入
modf将数组的小数和整数部分以两个独立的数组返回
isnan判断是否为NaN值
isfinite,ininf有穷,无穷
logical_not计算not x的真值,相当于-arr

二元ufunc

函数说明
add数组对应元素相加
subtract第一个数组减第二个数组
multiply数组元素相乘
divide,floor_divide相除,或弃余相除
power次方
maximum,fmax元素级最大值,忽略NaN
minimum,fmin
mod求模

数据处理

meshgrid

import matplotlib.pyplot as plt
points=np.arange(-5,5,0.01)
xs,ys=np.meshgrid(points,points)
z=np.sqrt(xs**2+ys**2)
plt.imshow(z,cmap=plt.cm.gray)
plt.colorbar()
plt.title('Image')

where

result=[(x if c else y) for c,x,y in zip(cond,xarr,yarr)]
result=np.where(cond,xarr,yarr)

# 嵌套
result=np.where(cond1 & cond2,0,
  np.where(cond1,1,
    np.where(cond2,2,3)))
# 布尔值当做01处理可写成
result=1*(cond1-cond2)+2*(cond2&-cond1)+3*-(cond1|cond2)
函数说明
meshgridar1为1行,ar2为1列,返回两个相互参照的广播产物
where(cond,xarr,yarr)判断cond,为True返回xarr,为False返回yarr

数学统计

np.sum(arr)
arr.sum(axis=0)
函数说明
sum全部或某轴向元素求和,0长度为0,传入axis则计算轴向
mean算数平均数,0长度为NaN
std,var标准差,方差,自由度可调默认为n
min,max最小值,最大值
argmin,argmax最小值,最大值索引
cumsum累计和
cumprod累计积

布尔值统计

arr=randn(100)
bools=arr>0
bools.sum()# 正值数量
bools.any(0)
bools.all()
函数说明
any包含1个或以上True返回True
all全部为True返回True

排序

np.sort(a=arr,axis=-1,order=None)
arr.sort(axis=-1)
函数说明
sort顶级方法返回已排序副本,就地排序修改数组本身

唯一及集合逻辑

sorted(set(arr))
np.unique(arr)
np.in1d(values,[2,3,4])
函数说明
unique(x)计算唯一元素返回有序结果
intersect1d(x,y)计算xy中交集元素返回有序结果
union(x,y)计算xy中并集元素返回有序结果
in1d(x,y)测试x在y中的成员资格
setdiff1d集合的差,元素在x且不再y
setxor1d差集,存在于一个数组不同时存在两个数组

输入输出

np.save('arr',arr)
np.load('arr.npy')

np.savez('arr.npz',arr)
np.load('arr.npz')

np.load('arr.txt',delimiter=',')
函数说明
np.save保存二进制格式到磁盘
np,savez字典格式保存二进制格式到磁盘
np.load读取磁盘二进制格式为数组
np.loadtxt读取文本文件

线性代数

矩阵乘法逻辑

在这里插入图片描述
计算元素要求:ele1.csize=ele2.rsize
输出结构格式:shape(ele1.rsize,ele2.csize)

# diag
np.diag((1,2,3)) #以指定对角线返回2d数组
np.diag(arr2) #返回1d数组,值为对角线
np.diag(arr2,1) #正对角线上一
np.diag(arr2,-1) #正对角线下一
np.diag(np.diag(arr2)) #除对角线其余为0

# trace
arr2d=np.arange(8).reshape(2,4) #元素1对元素4
print(arr2d)
print(np.trace(arr2d))

arr3d=np.arange(8).reshape(2,2,2) #行1对行4
print(arr3d)
print(np.trace(arr3d))

arr4d=np.arange(16).reshape(2,2,2,2) #表1对表4
print(arr4d)
print(np.trace(arr4d))
函数说明
diag以以为数组形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
dot矩阵乘法
trace计算对角线元素的和
det计算矩阵行列式
eig计算方阵的本征值和本证向量
inv计算方阵的逆
pinv计算矩阵的Moore-Penrose伪逆
qr计算QR分解
svd计算奇异值分解
solve解线性方程组Ax=b,A为一个方阵
lstsq计算Ax=b的最小二乘解

随机数

# >>>seed
np.random.seed(0);np.random.rand(4)
np.random.seed(0);np.random.rand(4) #生成相同的随机数
np.random.rand(4) #生成不同的随机数

# >>>permutation
np.random.permutation(arr2) #2d全部打乱忽略行列
arr=np.arange(10)
arr[list(np.random.permutation(10))]

# >>>shuffle
np.random.shuffle(arr2) #2d只对行打乱,1d效果与permutation相同

# >>>normal
np.random.normal(loc=0.0, scale=1.0, size=None) # loc为均值,scale为标准差(越小越瘦高)

二项分布样本值

p(N)=n(pN)*N((1-p)n-N)
N:取正对象数
n:一共对象数
p:每个对象取正的概率
np.sum(np.random.binomial(n=n,p=p,size=10000)==N)/10000

函数说明
seed确定随机数生产器种子
permutation返回一个序列的随机排列或返回一个随机排列范围
shuffle对序列就地随机排列
rand产生均匀分布的样本值
randint给定上下限随机选取整数
randn产生正态分布样本值(mean=0,std=1),类似MATLAB接口
binomial产生二项分布的样本值
normal产生正太分布(高斯分布)的样本值
beta产生Beta分布样本值
chisquare卡方分布样本值
gammaGamma分布样本值
uniform在[0,1)中均匀分布样本值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值