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:]
索引
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]]
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,uint8 | i1,u1 | 8位1字节 |
int16,uint16 | i2,u2 | |
int32,uint32 | i4,u4 | |
int64,uint64 | i8,u8 | |
float16 | f2 | |
float32 | f4,f | |
float64 | f8,d | |
float128 | f16,g | |
complex64,complex128,complex256 | c8,c16,c32 | 复数 |
bool | ? | |
object | O | |
str | S | 1字符为1字节 |
unicode | U | z字节数由平台觉得,中文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)))
result=1*(cond1-cond2)+2*(cond2&-cond1)+3*-(cond1|cond2)
函数 | 说明 |
---|
meshgrid | ar1为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)
np.diag((1,2,3))
np.diag(arr2)
np.diag(arr2,1)
np.diag(arr2,-1)
np.diag(np.diag(arr2))
arr2d=np.arange(8).reshape(2,4)
print(arr2d)
print(np.trace(arr2d))
arr3d=np.arange(8).reshape(2,2,2)
print(arr3d)
print(np.trace(arr3d))
arr4d=np.arange(16).reshape(2,2,2,2)
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的最小二乘解 |
随机数
np.random.seed(0);np.random.rand(4)
np.random.seed(0);np.random.rand(4)
np.random.rand(4)
np.random.permutation(arr2)
arr=np.arange(10)
arr[list(np.random.permutation(10))]
np.random.shuffle(arr2)
np.random.normal(loc=0.0, scale=1.0, size=None)
二项分布样本值
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 | 卡方分布样本值 |
gamma | Gamma分布样本值 |
uniform | 在[0,1)中均匀分布样本值 |