Numpy的核心对象array和array的创建Numpy对数组按索引查询
基础索引神奇索引布尔索引
Numpy的核心对象array和array的创建# numpy的核心数据结构,叫做array数组,array对象可以是一维数组,也可以是多维数组 # numpy就是对array这个对象进行操作 # python的list功能可以实现相同功能,但是array性能更优 # array和list的一个区别:array的元素必须是同一种类型,比如都是int类型,这也是numpy高性能的一个原因 # array本身的属性 # shape:返回一个元组,表示维度 # ndim:一个数字,表示array维度的数目 # size:一个数字,表示array中所有数据元素的数目 # dtype:array中数据的数据类型 # 创建array # 从python的列表list和嵌套列表创建array # 使用预定函数arange,ones/ones_like,zeros/zeros_like,empty/empty_like,full/full_like,eye等函数创建 # 生成随机数的np.random模块构建 # array本身支持大量操作和函数 # 直接逐元素加减乘除等算术操作 # 更好用的面向多维的数组索引 # 求sum/mean等聚合函数 # 线性代数函数,比如求逆矩阵,求解方程组 import numpy as np print(np.__version__) #显示numpy的版本 x=np.array([1,2,3,4,5,6,7,8]) y=np.array([[1,2,3,4],[5,6,7,8]]) print(x) print(y) print(x.shape) # 返回一个元组,表示维度 print(y.shape) print(x.ndim) # 返回一个数字,表示维度,比如1维,2维 print(y.ndim) print(x.size) # 表示一共有几个元素 print(y.size) print(x.dtype) print(y.dtype) a=np.arange(10) b=np.arange(2,10,2) print(a,b) a=np.ones(10) b=np.ones((2,3)) print(a,b) a= np.ones_like(b) # 创建一个维度和y相同的1矩阵 print(a) a=np.zeros(10) b=np.zeros((2,3)) print(a,b) a= np.zeros_like(b) # 创建一个维度和y相同的0矩阵 print(a) a=np.empty(10) # 各个元素是随机数,未初始化 b=np.empty((2,3)) print(a,b) a= np.empty_like(b) # 创建一个维度和y相同的空矩阵 print(a) a=np.full(10,666) # 各个元素由用户的指定值填充满(用666填满) b=np.full((2,3),777) print(a,b) a= np.full_like(b,888) # 创建一个维度和y相同的满矩阵 print(a) # np.random模块 # randn print(np.random.randn()) #生成给定维度的正态分布随机数,均值为0,方差为1 print(np.random.randn(3)) print(np.random.randn(3,2)) print(np.random.randn(3,2,4)) # array支持大量操作 a=np.arange(10).reshape(2,5) print(a) print(a.shape) print(a+1) # 所有元素加1 print(a*3) print(np.sin(a)) print(np.exp(a)) b=np.random.randn(2,5) print(a+b) # 对应元素相运算Numpy对数组按索引查询
import numpy as np x=np.arange(10) X=np.arange(20).reshape(4,5)基础索引
# # 基础索引 # # 一维数组,和python的list一样 print(x) print(x[0],x[1],x[5],x[-1]) print(x[2:4]) print(x[2:-1]) #从第三个到倒数第二个(不包含最后一个) print(x[2:]) #从第三个到最后一个 print(x[-3:]) #从倒数第三个到最后一个 # 二维数组,X[_,_] print(X) print(X[0,1])# 取第1行第2列的数 print(X[-1,2])# 取最后1行第3列的数 print(X[-1])# 取最后1行 print(X[0])# 取第1行 print(X[2])# 取第3行 print(X[:-1])# 取除了最后1行之外的其他行 print(X[:-1,2:4])# 取除了最后1行之外的其他行的第3列至第4列 print(X[:-2,2:4])# 取除了最后2行之外的其他行的第3列至第4列 print(X[:1,2:4])# 取前1行的第3列至第4列 print(X[:2,2:4])# 取前2行的第3列至第4列 print(X[:3,2:4])# 取前3行的第3列至第4列 print(X[:,0])# 取第1列 print(X[:,2])# 取第3列 # 二维数组的修改会改变原来的数组 # 因为numpy处理大数组,避免每次都复制 X[:2,:3]=666 #将二维数组的前2行和前3列修改为666 print(X)神奇索引
# 神奇索引 # 用整数数组index进行索引 # 一维数组 print(x) print(x[[3,4,7]]) index=np.array([[0,2],[1,4]]) print(x[index]) exmaple a=np.random.randint(1,100,10) # 随机生成[1,100)之间的10个整数 a.argsort() # 生成a中元素排序的下标(从小到大排序) print(a) print(a.argsort()) print(a[a.argsort()])#按照排序下标进行索引 print(a.argsort()[-3:])# a中最大的三个元素下标 print(a[a.argsort()[-3:]])# a中最大的三个元素下标 # 二维数组 print(X) print(X[[0,2]])#取出X的第1行和第3行 print(X[[0,2],:])#取出X的第1行和第3行(和上一行代码效果一样) print(X[:,[0,2]])#取出X的第1列和第3列 print(X[[1,3],[0,2]])#取出X的[1,0]和[3,2]处的元素布尔索引
# 布尔索引 # 一维数组 print(x) print(x>5)#输出布尔向量 print(x[x>5])#布尔索引,输出x中大于5的数 x[x<5]=0 x[x>=5]=1 #以5为界限进行01化 print(x) x[x==1]+=20 #x==1的元素全部+20 print(x) # 二维数组 print(X) print(X>10) print(X[X>10])# 输出的是一个向量(把所有的True连成了一个一维向量) print(X[:,3]>10)#输出X第3列大于10的布尔向量 print(X[X[:,3]>10])#用X第3列大于10的布尔向量索引出对应的行 X[X[:,3]>10]=666 print(X) # 布尔索引-条件组合 condition=(x%2==0)|(x>7) print(condition) print(x[condition])



