####六、np其他常用函数
import numpy as np
dir(np) # 查看np库中的函数
np.array([['张','男','19'],['李','女','20']],dtype='object')
# 当输入不同数据类型的元素时,需要指明数据类型,object使用最多,否则全部转化为字符串
np.arange(1,5,0.4) # 随机快速生成数组
np.arange(10,0,-1) # 倒序生成
np.linspace(1,8,5) # 第一、二位数是起始和结束位置,第三位意思是等分多少份,包含最后一位
np.linspace(1,8,5,endpoint=False) # 不包含最后一位,再等分5份,表示1和8起始点在一个地方
#如何查看numpy定义了哪些dtype?
np.typeDict
# 特殊元素组成的数组,可以是集合和字典等
a=np.array([{1,2},{3,4},{5,6}],dtype="object")
#注意这里dtype="object"可以省略。
#a是一个一维数组,它的shape是(3,)
a.ndim # 返回数组维度
b.shape # 返回一个元组, 表示2行3列
a.size # 返回数组包含多少个元素
b.dtype #返回数据类型
a.itemsize # 表示一个元素占用多少个字节
a.size * a.itemsize # 返回数组占用多少个字节
np.nan # 引用缺失值函数
a.dtype # 缺失值nan默认为float,所有它会将前面的整数型也转换成浮点型
np.array([1,2,None]) # 缺失值None会默认加上 dtype=object,所有库都可以识别
out[5]:
array([1, 2, None], dtype=object)
np.array(['1','2',np.nan]) # 缺失值nan 需要定义类型为object,只有np库或关联的库可识别
np.isnan(a) #识别缺失值,只能识别数值型,返回布尔值,应用范围非常小
np.zeros((2,3)) # 生成全部为0的数组,输入的必须为元组的形式
np.ones((3,4)) # 生成全部为1的数组
np.eye(2) # 生成单位矩阵
np.diag([1,2,3,4]) # 生成对角阵
np.empty((2,3)) # 随机生成没有初始化的数组
np.random.seed(100) # 指定随机种子,保证每次生成的随机数都是一样
np.random.rand(3,4) # 在0到1之间随机生成
np.random.uniform(10,50,(4,3)) # 第一、二位是起始范围,第三位元组表示需要生成的行列数
np.random.randn(3,4) #标准正态分布
np.random.randint(10,30,(3,4)) # 第一、二位是起始范围,第三位元组表示需要生成的行列数
np.random.choice(['张三','李四','王五'],10) # 从前面列表中随机抽取10个
a= np.array([1,2,3])
np.random.shuffle(a) #随机播放,直接影响数组a
# 累计求和
a.cumsum()
np.argsort(a) # 返回索引值升序排列
np.sort(a) # 按元素大小升序,不会改变数组a
a.sort() #直接改变数组a
np.argsort(b,axis=0) # axis=0,按列排序,返回索引值,=1时,按行排序
sorted(b,key=lambda x:x[1])
#默认进行升序排序,可以通过reverse参数进行设定
np.arange(15).reshape(3,5) # 随机生成一个数组,然后划分3行5列
np.arange(6).reshape(2,-1) # -1 表示替代列数(函数自行计算列数),此题-1就表示6/2=3列
c.ravel() # 多维数组压缩到一维数组
np.tile(a,(3,3)) # 按a,行和列分别扩大3倍
a[[0,2]] # 切取不连续的行,取一个不连续的行或列时候就需要用中括号,也就是列表
a[1:3,1] # 逗号左边表示行,右边表示列数
# 布尔索引
c[c[:,0]<0.5] # 切取第一列小于0.5的行
np.concatenate((a,a),axis=0) # axis=0,增加行数,纵向合并
np.concatenate((a,a),axis=1) # axis=0,增加行数,横向合并
a+b # a和b都是数组,a和b的对应元素相加
a*b # 对应元素相乘
# 广播运算,后缘维度相同的两个数组也可以运算,也就是列数相同,又叫沿着第0维度广播
a = np.array([[0,0,0],
[1,1,1],
[2,2,2],
[3,3,3]])
b= np.array([1,2,3])
a+b
out[8]:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
#某个数组一个维度为1 ,其他维度都相同的两个数组也可以运算,又叫沿着第1维度广播
a = np.array([[0,0,0],
[1,1,1],
[2,2,2],
[3,3,3]])
b=np.array([[1],[2],[3],[4]])
a+b
out[12]]:
array([[1, 1, 1],
[3, 3, 3],
[5, 5, 5],
[7, 7, 7]])
# 一元通用函数包括np.abs、np.sqrt、np.square等。
np.add(a,b) # a+b,对应元素相加
np.multiply(a,b) # a*b,对应元素相乘
np.maximum(a,b) # 两个数组对应位置的元素相比,返回较大值
a.T # 矩阵转置
a.transpose(1,0) # 矩阵转置,应用范围更广,三维使用
a.astype('str') # 转换数据类型
a.tolist() # 转换成列表
np.char.add(a,b) # 连接对应位置的字符串
np.char.upper(a) # 转换成大写
d=np.char.split(a,sep=" ") # 将字符串转换成列表,sep参数是设置分隔符
# 点积
a.dot(b) # 方法1
a @ b # 方法2
np.matmul(a,b) # 方法3
# 内积运算 一个矩阵乘以另外一个矩阵的转置就是内积
np.inner(a,a) # 方法1
np.dot(a,a.T) # 方法2
# 求行列式和逆矩阵,矩阵必须是方阵
np.linalg.det(a) # 行列式
np.linalg.inv(a) # 逆矩阵
# 二维数组的协方差矩阵
data1=np.random.rand(3,10) #随机生成一个二维数组
np.cov(data1) #可以将每一行看做一个X,3个X的协方差,输出3*3的列表
sum([1,2,3],5) # 5是起始值,即5+1+2+3=11
a = np.array([[1,2,3],
[3,4,5]])
np.sum(a,1) # 1 表示轴的意思,也就是行相加,列不变,返回([6,12])
sum(a,2) # 每列分别相加再加2,返回([6,8,10])
np.max(a) # 返回数组中最大的值5
a.argmin(a) #返回数组中最小的值1
np.max(a,0) # 0 表示0轴的意思,返回每一列的最大值([3,4,5])
a.argmax(axis=0) # 返回每一列的最大值的索引([1,1,1],dytype=int64)
np.sum(a,axis=0,keepdims=True) # 每列和二维数组
out[12]:
array([[4, 6, 8]])