numpy编程
1.简介
NumPy是科学计算基础库, 提供大量科学计算相关功能, 比如数据统计, 随机数生成等。 其提供最核心类型为多维数组类型(ndarray) , 支持大量的维度数组与矩阵运算, Numpy 支持向量处理 ndarray 对象, 提高程序运算速度
2.安装 与测试
2.1安装
pip install numpy
2.2测试
#导入numpy
import numpy as np
#创建数组
a=np.arange(10)
print(a)
print(type(a))
#对ndarray对象类型进行向量处理
print(np.sqrt(a))
#对列表中的元素开平方
import math
b=[3,4,9]
#定义存储开平方结果的列表
result=[]
#遍历列表
for i in b:
result.append(math.sqrt(i))
print(result)
3.数组创建
3.1array创建
#导入numpy模块
import numpy as np
#使用array函数创建一维数组
a=np.array([1,2,3,4])
print(a)
print(type(a))
print(a.shape)#获取数组维度
#使用array函数创建二维数组
b=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(b)
print(type(b))
#使用array函数创建三维数组
c=np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(c)
print(type(c))
#array函数中dtype的使用
d=np.array([3,4,5],dtype=float)
print(d)
print(type(d))
#array函数中ndim的使用
e=np.array([5,6,7],dtype=float,ndmin=3)
print(e)
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
3.2arange创建
numpy.arange(start, stop, step, dtype)#返回ndarray对象
#导入numpy
import numpy as np
#range的使用range(start,end,step) [start,end)
a=list(range(1,10)) #步长是1
print(a)
b=list(range(10)) #默认的是从0开始 ,步长是1
print(b)
c=list(range(1,10,3))
print(c)
#arange创建数组
#使用arange创建1,10的数组
a=np.arange(1,11)
print(a)
#设置step
b=np.arange(1,11,2)
print(b)
#设置dtype
c=np.arange(10,20,2,dtype=float)
print(c)
3.3arange创建二维数组
b=np.array([np.arange(1,4),np.arange(4,7),np.arange(7,10)])
print(b)
print('b 数组的维度: ',b.shape)
3.4随机数组
#导入模块
import numpy as np
def randomTest():
# 使用random创建一维数组 [0.0,1.0)
a = np.random.random(size=5)
print(a)
print(type(a))
# 创建二维数组
b = np.random.random(size=(3, 4))
print(b)
# 创建三维数组
c = np.random.random(size=(2, 3, 4))
print(c)
#随机整数
def randomintTest():
#生成0-5之间的随机整数 一维
a=np.random.randint(6,size=10)
print(a)
print(type(a))
#生成5-10之间的随机整数 二维
b=np.random.randint(5,11,size=(4,3)) #4行 3列
print(b)
# 生成5-10之间的随机整数 三维
c=np.random.randint(5,11,size=(2,4,3))
print(c)
#dtype的使用
d=np.random.randint(10,size=5,dtype=np.int64)
print('默认的dtype',d.dtype)
#创建标准的正太分布 期望为0 方差为1
def randnTest():
a=np.random.randn(4)
print(a)
#创建二维的
b=np.random.randn(2,3)
print(b)
#创建三维的数组
c=np.random.randn(2,3,4)
print(c)
#创建指定期望和方差的正太分布
def normalTest():
a=np.random.normal(size=5) #默认的期望是loc=0.0 方差scale=1.0
print(a)
#指定期望和方差
b=np.random.normal(loc=2,scale=3,size=(3,4))
print(b)
#调用
# randomTest()
# randomintTest()
# randnTest()
normalTest()
3.5其他方式创建数组
#导入numpy模块
import numpy as np
#zeros
def zerosTest():
#numpy.zeros(shape, dtype = float, order = 'C')
a=np.zeros(5)
print(a)
#指定类型
b=np.zeros((5,),dtype=int)
print(b)
#创建二维数组
c=np.zeros((3,4))
print(c)
#ones
def onesTest():
#numpy.ones(shape, dtype = None, order = 'C')
a=np.ones(10)
print(a)
b=np.ones((2,5),dtype=int)
print(b)
# empty
def emptyTest():
#numpy.empty 方法用来创建一个指定形状(shape) 、 数据类型(dtype) 且未初始化的数组。numpy.empty(shape, dtype = float, order = 'C'),第三个参数为c,f表示行优先或者列优先
a=np.empty(8)
print(a)
b=np.empty((3,4))
print(b)
#linspace
def linespaceTest():
#np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)创建一个一维数组, 数组是一个等差数列构成的。第四个参数该值为 ture 时, 数列中中包含 stop 值, 反之不包含, 默认是 True
a=np.linspace(1,10,10)
print(a)
b=np.linspace(5,20,5,endpoint=False)
print(b)
# logspace
def logspaceTest():
#np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)创建等比数列
a=np.logspace(0,9,10,base=2)
print(a)
# zerosTest()
# onesTest()
# emptyTest()
# linespaceTest()
logspaceTest()
4.ndarray属性
5.ndarray切片和索引
#导入numpy模块
import numpy as np
#创建一维数组
a=np.arange(10)
print(a)
#正索引访问 索引从0开始 长度-1
print('索引0处的元素:',a[0])
print('索引5处的元素:',a[5])
#负索引访问 倒数第一个的索引为-1
print('访问最后一个元素:',a[-1])
print('访问倒数第三个元素:',a[-3])
#切片正向索引操作 [start:stop:step]
print(a[:]) #从开始到结尾
print(a[3:]) #从索引3开始到结尾
print(a[3:5]) #从索引3开始到索引4 [start,stop)结尾
print(a[1:7:2]) #从索引1开始到索引6,步长是2
#切片中负索引操作
print(a[::-1]) #反向获取
print(a[-5:-2])
#导入numpy模块
import numpy as np
#创建一维数组
a=np.arange(1,13)
print(a)
#对一维数组进行修改形状 (4,3)
a=a.reshape((4,3))
print(a)
#索引的使用
#获取第三行
print(a[2])
#获取第二行 第3列
print(a[1][2])
#切片的使用 [行进行切片,列进行切片] [start:stop:step,start:stop:step]
#获取所有行所有列
print(a[:,:])
#获取所有行部分列 所有行第2列
print(a[:,1])
#获取所有行部分列 所有行第1,2列
print(a[:,0:2])
#获取部分行 所有列 获取奇数行所有列
print(a[::2,:])
#获取部分行 部分列 获取奇数行 第1,2列
print(a[::2,0:2])
#坐标获取 [行,列]
#获取第2行第3列的元素
print(a[1][2])
print(a[1,2])
#同时获取不同行不同列 获取第2行第3列 第3行第1列
print(a[1,2],a[2][0])
print(np.array([a[1,2],a[2][0]]))
#使用坐标
print(a[(1,2),(2,0)])
#负索引的使用
print('最后一行')
print(a[-1])
print('行倒序')
print(a[::-1])
print('行列倒序')
print(a[::-1,::-1])
6.ndarray复制
#导入numpy模块
import numpy as np
#创建一个二维的数组
a=np.arange(1,13).reshape((3,4))
print(a)
#对a数组进行切片处理,获取第一、二行,第一二列
sub_a=a[:2,:2]
print(sub_a)
#对sub_a中第一行第一列的值进行修改
# sub_a[0][0]=100
# print(sub_a)
# print(a)
#通过切片可以获取到新数组,即使赋值给新的变量,但还是原来数组的视图。
# 如果对切片数组中元素的值,进行修改会影响原来的数组
#可以使用numpy中的copy方法实现
sub_aa=np.copy(a[:2,:2]) #是深拷贝
sub_aa[0,0]=200
print(sub_aa)
print(a)
7.改变维度
#导入numpy模块
import numpy as np
#通过reshape将一维数组修改为二、三维
#创建一个一维数组
a=np.arange(1,25)
print(a)
#将一维修改为二维 (2,12) (4,6) (3,8)
# b=a.reshape(4,6)
b=a.reshape((3,8))
print(b)
#将一维修改为三维 (2,3,4)
c=a.reshape((2,3,4))
print(c)
#通过np.reshape()进行修改
# bb=np.reshape(a,(3,8)) #将一维修改为二维
bb=np.reshape(a,(4,3,2))#将一维修改为三维
print(bb)
#将多维数组修改为一维数组
# a=bb.reshape(24)
a=bb.reshape(-1)
print(a)
#通过 ravel、flatten函数将多维数组转换为一维数组
# ravel
a=bb.ravel()
print(a)
# flatten
a=bb.flatten()
print(a)
8.数组拼接
#导入numpy
import numpy as np
#创建两个数组
a=np.array([[1,2,3],[4,5,6]])
b=np.array([[11,12,13],[14,15,16]])
print(a)
print(b)
#使用hstack进行水平拼接
# r=np.hstack([a,b])
r=np.hstack((a,b))
print(r)
#使用vstack进行垂直方向拼接
r=np.vstack((a,b))
print(r)
#concatenate的使用
print('axis=0 默认情况 垂直方向拼接 相当于vstack')
r1=np.concatenate((a,b),axis=0)
r2=np.concatenate((a,b))
print(r1)
print(r2)
# 二维数组有两个轴 axis=0 axis=1
print('axis=1 水平方向拼接 相当于hstack')
r3=np.concatenate((a,b),axis=1)
print(r3)
#三维数组有三个轴 axis=0 1 2
a=np.arange(1,13).reshape(1,2,6)
print(a,a.shape)
b=np.arange(101,113).reshape(1,2,6)
print(b,b.shape)
print('三维 axis=0')
r1=np.concatenate((a,b),axis=0)
print(r1,r1.shape)
print('三维 axis=1')
r2=np.concatenate((a,b),axis=1)
print(r2,r2.shape)
print('三维 axis=2')
r3=np.concatenate((a,b),axis=2)#相当于dstack
print(r3,r3.shape)
9.数组分割
#导入numpy模块
import numpy as np
#创建一维的数组
a=np.arange(1,13)
#调用split函数进行分隔
print('传递整数 平均分隔')
r=np.split(a,4,axis=0)
print(r)#r[0],r[1],r[2],r[3]可以访问分割的子数组
print('传递数组 按位置分隔')
r=np.split(a,[4,6])
print(r)
#二维数组进行分隔
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
print(a)
print('axis=0 垂直方向 平均分隔')
r,w=np.split(a,2,axis=0)
print(r)
print(w)
print('axis=0 垂直方向 按位置分隔')
r,w,k=np.split(a,[2,3],axis=0)
print(r)
print(w)
print(k)
print('axis=1 水平方向 平均分隔')
r,w=np.split(a,2,axis=1)
print(r)
print(w)
print('axis=1 水平方向 按位置分隔')
r,w=np.split(a,[3],axis=1)
print(r)
print(w)
#使用hsplit() 水平方向分隔
print('hsplit 平均分隔')
r,w=np.hsplit(a,2)
print(r)
print(w)
print('hsplit 按位置分隔')
r,w=np.hsplit(a,[3])
print(r)
print(w)
#vsplit()
print('vsplit 平均分隔')
r,w=np.vsplit(a,2)
print(r)
print(w)
print('vsplit 位置分隔')
r,w=np.vsplit(a,[1])
print(r)
print(w)
10.数组转置
#导入numpy模块
import numpy as np
#创建二维数组
a=np.arange(1,25).reshape(8,3)
print(a)
print('transpose函数进行数组转置 a[i][j]---a[j][i]')
b=a.transpose()
print(b,b.shape)
#可以使用 .T
print(a.T)
#numpy中transpose()
c=np.transpose(a)
print(c,c.shape)
#多维数组进行转置
a=a.reshape(2,3,4)
print(a,a.shape)
print('对于三维a[i][j][k] 进行转置 默认的将i和k交换')
b=np.transpose(a)
print(b,b.shape)
#(2,3,4) (3,4,2)
c=np.transpose(a,(1,2,0))
print(c,c.shape)
10.其他函数
#导入numpy
import numpy as np
a=np.arange(9).reshape(3,3)
b=np.array([10,10,10])#运算把b当成3X3
print('加法')
print(np.add(a,b))
print(a+b)
print('减法')
print(np.subtract(b,a))
print(b-a)
print('乘法')
print(np.multiply(a,b))
print('除法')
print(np.divide(a,b))#或者试试符号+-*/。
#out参数的使用
y=np.empty((3,3),dtype=np.int)
np.multiply(a,10,out=y)#指定输出结果到y
print(y)
#三角函数
a=np.array([0,30,60,90])
print(np.sin(a))#print(np.sin(a*np.pi/180))转化为弧度
#around ceil floor
a = np.array([1.0,4.55, 123, 0.567, 25.332])
print('around:',np.around(a))#numpy.around(a,decimals)第二个参数表示舍入的小数位数
print('ceil:',np.ceil(a))#取整
print('floor:',np.floor(a))
#统计函数
# power()
a=np.arange(1,13).reshape(3,4)
print('原数组a')
print(a)
print('power:',np.power(a,2))
#power中out的使用
x=np.arange(5)
y=np.zeros(10)
np.power(2,x,out=y[:5])
print(y)
# median ()
#一维数组的中位数
a=np.array([4,3,2,5,2,1]) #对数组排序 [1,2,2,3,4,5] 数组中元素个数为偶数 中位数指:中间两个数的平均值
print(np.median(a))
a=np.array([4,3,2,5,2]) #对数组排序 [2,2,3,4,5] 数组中元素个数为奇数 中位数指:中间的数
print(np.median(a))
#mean 求平均值
#一维数组
a=np.array([4,3,2,5,2])
print(np.mean(a))
#二维数组 axis指定轴求平均
a=np.arange(1,13).reshape(3,4)
print(a)
print('axis=0 垂直方向',np.mean(a,axis=0))
print('axis=1 水平方向',np.mean(a,axis=1))
#sum() max() min()
a=np.array([4,3,2,5,2])
print('max:',np.max(a))
print('sum:',np.sum(a))
print('min:',np.min(a))
#argmax argmin
print('argmin:',np.argmin(a))
print('argmax:',np.argmax(a))