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))

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值