python—NumPy基础(3)


numpy 是 Python 中的一个开源数值计算扩展库,它提供了大量的数学函数库,以及一个强大的 N 维数组对象 ndarray。numpy 是 Python 进行科学计算的基础包,广泛用于数据分析、机器学习、深度学习等领域。

算术函数

如果参与运算的两个对象 都是ndarray,并且形状相同,那么会对位彼此之间进行(+ - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和divide()。

算术函数的使用

a=np.arange(9,dtype=np.float).reshape(3,3)
b=np.array([10,10,10])
print(np.add(a,b))
print(a+b)
print(np.subtract(a,b))
print(a-b)
print(np.multiply(a,b))
print(a*b)
print(np.divide(a,b))
print(a/b)

算术函数中out参数的使用

x = np.arange(5)
y = np.empty_like(x)
np.multiply(x, 10, out=y)
print(y)

mod()函数的使用

numpy.mod() 计算输入数组中相应元素的相除后的余数。函数numpy.remainder() 也产生相同的结果。

a=np.array([10,10,30])
b=np.array([3,5,7])
print(np.mod(a,b))
print(np.remainder(a,b))
print(a%b)

统计函数

NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 具体如下:

函数名说明
np.sum()求和
np.prod()所有元素相乘
np.mean()平均值
np.std()标准差
np.var()方差
np.median()中数
np.power()幂运算
np.sqrt()开方
np.min()最小值
np.max()最大值
np.argmin()最小值的下标
np.argmax()最大值的下标
np.cumsum()对数组中元素累积求和,可指定轴
np.cumprod()对数组中元素累积求积,可指定轴
np.ptp()计算一组数中最大值与最小值的差,可指定轴
np.unique()删除数组中的重复数据,并对数据进行排序
np.nonzero()返回数组中非零元素的索引

power()函数的使用

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

x = np.arange(1,5)
y = np.empty_like(x)
np.power(x, 2, out=y)
print(y)

median ()函数的使用

a=np.array([4,2,1,5])
#计算偶数的中位数
print('偶数的中位数:'
,np.median(a))
a=np.array([4,2,1])
print('奇数个的中位数:'
,np.median(a))
a=np.arange(1,16).reshape(3,5)
print('调用median函数')
print(np.median(a))
print('调用median函数,axis=1 行的中值')
print(np.median(a,axis=1))
print('调用median函数,axis=0 列的中值')
print(np.median(a,axis=0))

mean ()函数的使用

numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。

a=np.arange(1,11).reshape(2,5)
print(np.mean(a))
print('调用mean函数 axis=0 列')
print(np.mean(a,axis=0))
print('调用mean函数 axis=1 行')
print(np.mean(a,axis=1))

函数的使用

a = np.random.randint(10,50,size=20)
np.max(a)
np.sum(a)
np.min(a)
np.max(a)
np.ptp(a)
np.unique(a)
np.nonzero(a)

其他常用函数

方法说明
np.tile()将数组的数据按照行列复制扩展
np.repeat()将数组中的每个元素重复若干次
roll()沿指定轴对数组元素进行移位
resize()重新调整数组的大小
place()/put()将数组中满足条件的元素/指定的元素替换为指定的值
np.savetxt()将数据保存到txt文件中
np.loadtxt()从文件中加载数据
np.genfromtxt()根据文件内容中生成数据,可以指定缺失值的处理等
np.any()如果数组中存在一个为True的元素(或者能转为True的元素),则返回True
np.all()如果数组中所有元素都为True(或者能转为True的元素),则返回True
np.where(条件,x,y)如果条件为True,对应值为x,否则对应值为y
np.dot()将矩阵相乘
np.sort()对数组进行排序,返回一个新的排好序的数组,原数组不变
np.argsort()返回的是数组值从小到大排序后元素对应的索引值

tile()和repeat()函数的使用

a = np.arange(4)
#复制2次
np.tile(a,2)
#行列复制
np.tile(a,(3,2))
np.repeat(a,2)
a = np.arange(1,13).reshape(3,4)
np.repeat(a,2)
np.repeat(a,2,axis=0)
np.repeat(a,2,axis=1)

roll()函数的使用

#一维数组
#向后调3个
np.roll(a,3)
#向前调1个
np.roll(a,-1)
#二维数组
np.roll(aa,2)
np.roll(aa,2,axis=0)

resize()函数的使用

aa.reshape(4,3)#修改维度,元素个数必须相同
np.resize(aa,(5,6)) #resize重新调整数组的大小,元素个数可以不相同

replace()和put()函数的使

aa = np.random.randint(40,100,(3,4))
#小于60分的 全部替换为0
np.place(aa,aa<60,0)
#put()指定的索引处的元素替换为指定的值
aa = np.arange(1,13).reshape(3,4)
np.put(aa,2,100)

savetxt()和loadtxt()函数的使用

#保存
a = np.random.randint(-50,100,1000)
np.savetxt('savetxt.txt',a,fmt='%d')
#加载
b = np.loadtxt('savetxt.txt',dtype=int)
b

any()、all()函数的使用

#any函数 只要有一个元素为True,则结果返回True
#all函数 只有所有元素都为True,则结果返回True
x = np.array([False,True,True,1,None,0])
np.any(x)
np.all(x)

where()函数的使用

np.random.seed()
a = np.random.randint(20,100,10)
print(a)
print(np.where(a>50,True,False))

dot函数的使用

#dot函数 矩阵相乘
x = np.array([[1,2],[3,4]])
y = np.array([[2,3],[1,2]])
x.dot(y)
x.dot(3) #每个元素与3相乘

注意:矩阵相乘前提是,第一个矩阵的列数和第二个矩阵的行数要相同

数组排序

在这里插入图片描述

一维数组排序

排序中主要用到的方法是np.sort和np.argsort。其中np.sort()是对数组直接排序。而np.argsort()是返回排序后的原始索引。

a=np.array([5,2,4,6,1,9])
print('sort排序后:'
,np.sort(a))
print('argsort排序:'
,np.argsort(a))

二维数组排序

np.random.seed(44)
a=np.random.randint(100,size=(4,6))
#直接使用sort排序指定axis的值
print(np.sort(a,axis=0))
print(np.sort(a,axis=1))

按最后一列进行排序

#可以先获取最后一列的数组
b=a[:,-1]
print(b)
#获取最后一列数组排序后的原始索引
index=np.argsort(b)
#使用facy_indexing汇总数组
print(a[index])

numpy广播机制

在这里插入图片描述

两个数组相加

import numpy as np
# 在numpy中存在广播机制
a=np.array([0,1,2])
print(a+5)
b=np.array([5,5,5])
print(a+b)

维度不相同的数组相加

a=np.arange(3) #一行[0 1 2]
b=np.arange(3).reshape(3,1)  #三行1列
'''
广播的规则
1,如果两个数组维度个数不同,那么小维度的数组形状会在
左边补1
2,如果两个数组形状在任何一个维度上都不匹配,数组的形
状会沿着维度为1的维度扩展到匹配上另一个数组的形状
3,如果没有维度形状为1,则会引发异常
0 1 2         0 0 0
0 1 2         1 1 1
0 1 2         2 2 2
'''
print(a+b)
  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值