numpy知识点概括

本文详细介绍了如何使用NumPy库在Python中生成随机数,包括一维、二维和三维数组的创建,以及随机整数和正态分布的生成。此外,还涵盖了数组的索引、切片、拼接、转置、统计运算和基本的算术函数,适合初学者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#导入numpy

import numpy as np
import random

#创建随机数

 #一维数组:
    a=np.random.random(size=5)#生成五个0-1之间的随机数
    #二维数组:
    b=np.random.random(size=(3,4))#生成三行四列0-1之间的随机数
    #三维数组:
    c=np.random.random(size=(2,3,4))#生成两个三行四列的0-1之间的随机数

#创建随机整数:

#np.random.randint(low,high=None,size=None,dtype='1')
    #生成0-5之间的10个一维随机整数:
    a=np.random.randint(6,size=10)
    #生成5-10之间的四行三列随机整数:
    b=np.random.randint(5,11,size=(4,3))
    #生成5-10随机整数  三维
    c=np.random.randint(5,10,size=(2,4,3))
    #dtype的使用:
    d=np.random.randint(10,size=5,dtype=np.int64)
    print('默认的dtyoe',d.dtype)

#正态分布:
#创建标准的正态分布 期望为0 方差为1

    #一维:
   a=np.random.randn(4)
    #二维:
    b=random.randn(2,3)
    #三维:
    c=random.randn(2,3,4)

#创建指定期望和方差的正态分布:

 random.normal(loc=0.0,scale=1.0,size=None)  #loc(期望)  scale(方差)



#创建一维的数组:
    a=np.array([1,2,3,4])   #[1 2 3 4]
    b=np.arrange(4,10)   #[4 5 6 7 8 9]
#创建二维的数组:
    b=np.random.randint(4,10,size=(2,3))   #4-10之间的二维随机整数
#创建三维的数组:
    c=np.random.randn(2,3,4)  #三维的标准的正态分布

#ndim属性(维度):
    print('ndim:',a.ndim,b.ndim,c.ndim)   #ndim:1 2 3  表示维度

#shape(形状)属性:
    print('shape:',a.shape,b.shape,c.shape) #shape:(4,)(2,3)(2,3,4)
#dtype(当前元素的类型)
    #dtype:int32 int32 float64
#size(元素的总个数):
    #size:4 6 24
#itemsize(每个元素所占的字节):
    #itemsize:4 4 8

#zeros创建指定大小的数组,数组元素以0来填充:


#    numpy.zeros(shape,dtype=float,order='C')  默认dtype='float'

 x=np.zeros(5) #结果为[0. 0. 0. 0. 0.] 五个float型
    y=np.zeros((5,),dtype=int)#设置类型为int  结果为[0 0 0 0 0]
#ones 以0填充:
    z=np.ones(5) #结果为[1. 1. 1. 1. 1.]

#empty

#linspace(创建一个等差的一位数组):
    #np.linspace(start,stop,num=50(要生成的等长步数的样本数量默认为50),endpoint=True,retstep=False,dtype=None)
    np.linspace(1,10,10)#结果为:[1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
    np.linspace(5,20,5,endpoint=False)#结果为[5. 8. 11. 14. 17.]
    np.linspace(5,20,5,endpoint=True)#结果为[5. 8.75 12.5 16.25 20.]
#logspace(创建一个等比数列):

***

np.logspace(start(起始值 log**),stop(结束值log**
与endpoint值有关),num=50(等步长的样本数量,默认为50),endpoint=True(该值为True时,数列中包含stop值,反之不包含,默认为True),base=10.0(对数log的底数),dtype=None(ndarray的数据类型))


#索引:

#创建一维数组:
a=np.arrange(10)        #[0 1 2 3 4 5 6 7 8 9]
print(a)
#正索引访问  索引从0开始 长度-1:
print('索引0处的元素:',a[0])      #0
print('索引5处的元素:',a[5])      #5

#负索引访问 倒数第一个元素为-1:
print('访问最后一个元素:',a[-1])        #9
print('访问倒数第三个元素:',a[-3])       #7

#切片操作: [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])     #[5 6 7]

#对二维数组进行切片操作:
        x=np.arrange(1,13) #[1 2 3 4 5 6 7 8 9 10 11 12]
        a=x.reshape(4,3)    #重新转换x的形状  [[1 2 3]
                            #                [4 5 6]
                            #                [7 8 9]
                            #                [10 11 12]]
        print('数组元素',a)
        print('获取第二行',a[1])
        print('获取第三行第二列',a[2][1])

        #切片的使用: [行进行切片,列进行切片]   [start:stop:step,start:stop:step]
        print(a[:,:])   #获取所有行所有列
        print(a[:,1])   #获取所有行部分列   所有行第二列
        print(a[:,0:2]) #获取所有行部分列   所有行第一,二列
        print(a[::2,:]) #获取奇数行所有列
        print(a[::2,0:2])   #获取奇数行 第一1二列

    #同时获取第三行第二列,第四行第一列:
    print(np.array((a[2,1],a[3,0])))    #创建一个数组
    print(a[(2,3),(1,0)])       #使用坐标 2对1 3对0


#坐标获取:  [行,列]
    #获取第二行第三列的元素:
    print(a[1][2])
    print(a[1,2])

    #同时获取不同行不同列     获取第二行第三列    第三行第一列:
    print(a[1,2],a[2][0])
    print(np.array(a[1,2],a[2][0]))     #使用数组
    #使用坐标解决:
    print(a[(1,2),(2,0)])

    #负索引的使用:
    print('最后一行',a[-1])
    print(('行倒序',a[::-1]))       #[[10 11 12]
                                   #[7 8 9]
                                   #[4 5 6]
                                   #[1 2 3]]
    print('行列倒序',a[::-1,::-1])

#数组的复制:

  a=np.arrange(1,13).reshape((3,4))

    #对a数组进行切片处理,获取第一、二行,第一、二列
    sub_a=a[:2,:2]

    #对sub_a中第一行第一列的值进行修改
    sub_a[0][0]=100

    #通过切片可以获取到新数组,及时赋值给新的变量,但还是原来数组的视图
    #如果对切片数组中元素的值进行修改,会影响原来的数组
    #可以用numpy中的copy方法实现:
    sub_aa=np.copy(a[:2,:2])    #是深拷贝(不会影响原数组的值)
    sub_aa[0,0]=200
    print(sub_aa)
    print(a)

 #修改数组的维度:
 #通过reshape将一维数组修改为二、三维数组:
 # a.reshape(10,11)  将行和列直接传入   a.reshape((10,11)) 将行和列作为元组传入

 #创建一个一维数组
    a=np.arrange(1,25)#1-24
    #将一维修改为二维
    b=a.reshape(3,8)
    b=a.reshape((3,8))
    print(b)
    #将一维修改为三维:
    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)

    #将多维数组修改为一维数组:
    #利用reshape()
    a=bb.reshape(24)#()内要与bb内的元素数量保持一致
    a=bb.reshape(-1)
    print(a)

    #利用函数:
    #ravel:
    a=bb.ravel()
    print(a)
    #flatten:
    a=bb.flatten()
    print(a)

#数组的拼接:

 #创建两个数组:
    a=np.array([[1,2,3],[4,5,6]])
    b=np.array([[11,12,13],[14,15,16]])
    print(a)
    print(b)
    #hstack(将a,b水平方向首尾连接,形成一个新的数组):
    r=np.hstack([a,b])
    print(r)

    #vstack(垂直方向)
    r=np.vstack((a,b))#a,b使用元组或者列表都可以
    print(r)

    #concatenate:
    #numpy.concatenate((a1,a2,...),axis)  a1,a2:类型相同的数组,axis:沿着它连接数组的轴默认为0
    print('axis=0 默认情况  垂直方向拼接  相当于vstack')
    np.concatenate((a,b),axis=0)

    #二维数组有两个轴 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)

    #np.concatenate((a,b),axis=)#axis的值决定哪个方向进行拼接

#数组的分割:

 #split分割:
    #numpy.split(ary,indices_or_sections,axis)  #ary:被分割的数组
    #indices_or_sections:如果是一个整数,就该用该数平均切分,如果是一个数组,为沿轴切分的位置
    #axis:默认为0横向切分,为1时,纵向切分

    x=np.arange(1,9)#[1 2 3 4 5 6 7 8]
    a=np.split(x,4)
    print(a)#传递整数,平均分割[array[1,2],array[3,4],array[5,6],array[7,8]]

    r=np.split(x,[4,6])
    print(r)#   [array[1,2,3,4],array[5,6],array[7,8]]

    #二维数组进行分割:
    a=np.array[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

    #axis=0垂直分割,axis=1水平分割

    r,w=np.split(a,2,axis=0)#垂直方向平均分割成两段
    r,w,k=np.split(a,[2,3],axis=0)#垂直方向按位置分割为三段

    #使用hsplit():按水平方向分割,不需要传axis
    r,w=np.hsplit(a,2)#平均分割成两部分

    r,w=np.hsplit(a,[2])#将前两列分割成一部分,后面的分割成一部分
    #使用vsplit
    r,w=np.vsplit(a,2)#垂直平均分割
    r,w=np.vsplit(a,[2])#位置分割

#数组的转置:

  #创建二维数组:
    a=np.arange(1,25.reshape(8,3))

    #使用transpose函数进行数组转置a[i][j]--a[j][i]
    b=a.transpose()#b为a的转置数组
    #使用.T进行转置
    print(a.T)#和print(b)结果一致

    #使用numpy中transpose():
    c=np.transpose(a)
    print(c,c.shape)

    #多维数组进行转置:
        a=a.reshape(2,3,4)
        print(a,a.shape)
        b=np.transpose(a)
        print(b.shape)#     结果为4,3,2  默认的将i和k进行交换

        c=np.transpose(a,(1,2,0))
        print(c.shape)#     结果为3,4,2  三维数组的维度依次为 0 1 2,上边的方法是进行指定维度的转置

#算数函数

a=np.arange(9).reshape(3,3)
b=np.array([10,10,10])
print('加法',np.add(a,b))
print('减法',np.subtract(b,a))

#out参数的使用
y=np.empty((3,3))
np.multiply(a,10,out=y)
print(y)


#三角函数:
a=np.array([0,30,60,90])
print(np.sin(a))

a=np.arry([1.0,4.55,1.23,0.567,25.532])
print('四舍五入:',np.around(a))
print('向上取整:',np.ceil(a))
print('向下取整:',np.floor(a))


#统计函数:
    #聚合函数:#搜索numpy的聚合函数都有哪些

        #power函数的使用:
        numpy.power()#函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂
        a=np.arange(1,13).reshape(3,4)
        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]]#    2的x次方 依次存入y的0-4位置   存放时要指定位置,制定的数量要与x内元素的数目相同

        #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])
        #排序 数组中元素个数为奇数  中位数指中间的值

        #二维数组   要通过axis指定轴
        a=np.arange(1,13).reshape(3,4)
        print(a)
        print('垂直方向',np.median(a,axis=0))
        print('水平方向',np.median(a,axis=1))

        #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:'np.mean(a))#结果为所有值加起来的平均值
        print('垂直方向',np.mean(a,axis=0))
        print('水平方向',np.mean(a,axis=1))

        #sum()  max()   min()   argmax()  argmin()
        a=np.array([4,3,2,5,2])
        print('max:',np.max(a))
        print('min:',np.min(a))
        print('sum:',np.sum(a))
        print('argmax(最大值的下标):',argmax(a))
        print('argmin:',argmin(a))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值