• 【Python】简述Numpy库常用方法和属性


    生成数组

    常见的生成数组方法

    import numpy as np
    testdata = np.arange(16)#生成指定数量个整型元素的数组
    
    test_data = np.full((2,3),9)#指定生成2行3列,元素全为9的数组
    
    data1 = np.zeros(15)#生成指定数量个元素全为0的数组
    
    data2 = np.ones(20)#生成指定数量个元素全为1的数组
    
    data3 = np.array(data1)#从现有数组拷贝
    
    data4 = np.copy(data3)#同上(均为深拷贝)
    
    data5 = np.asarray(data1)#同上,但为浅拷贝,会随原数组变化而变化
    
    data6 = np.linspace(0,15,10)#在指定区间内生成指定数量个元素的数组
    
    data7 = np.arange(0,11,5)#在指定区间内生成指定间隔的数组
    
    data8 = np.random.randint(1,100,35,'i')#生成35个从1到100之间的数组成数组

    data9 = np.clip(x,min,max)#从数组x中取min到max之间的数值

    其中,每个方法中还有需要非必要参数,如果有需要还需查阅相关资料。

    生成均匀分布数组

    ###均匀分布(在相同长度间隔的分布概率是等可能的)
    import matplotlib.pyplot as plt
    data9 = np.random.uniform(10,20,1000000)#从10到20之间,随机生成1000000个数据组成均匀分布数组
    print('data9:',data9)
    plt.figure(figsize=(20,8),dpi=100)
    plt.hist(data9,1000)
    plt.show()
    均匀分组

    运行结果为

    data9: [17.20969749 11.91751292 12.13526962 ... 12.63111667 11.86567292
     19.94391678]

    生成正态分布数组

    ###正态分布
    import matplotlib.pyplot as plt
    data10 = np.random.normal(1.71,0.2,1000000)#生成1000000个元素为均值为1.71,方差为0.2的数组
    plt.figure(figsize=(20,8),dpi=100)
    plt.hist(data10,1000)
    plt.show()
    正态分布

    运行结果为

     

    ndarray属性的用法

    常用的属性方法

    array = np.array([[80,66,25,14,33],
                      [11,45,15,34,89],
                      [10,85,45,28,94],
                      [18,51,74,85,10],
                      [89,31,54,65,32],
                      [56,13,87,12,65],
                      [87,15,32,45,51],
                      [17,30,84,12,45]])
    array.shape#数组的维度(行列数)
    
    array.ndim#数组维度的个数
    
    array.size#数组的个数
    
    array.dtype#数组中元素的类型
    
    array.itemsize#数组中元素的字节大小
    
    array.data[1,2]#访问数组中某个位置的元素
    
    ###切片索引与形状修改
    data11 = np.random.normal(1,0.21,(8,11))###生成八组正态分布数组,每个数组内有11个元素
    
    data12 = data11.reshape(11,8)###只在原数据基础上重新分割为指定行列,然后返回新的数组,并不影响原数组
    
    data13 = data11.resize(11,8)###只在原数据基础上重新分割为指定行列,改变原数组,没有返回值
    
    data14 = data12.T###转置,行变成列,列变成行,不改变原数组
    
    ###改变数据类型,数组去重
    data15 = np.random.uniform(1,10,(4,5))###生成四组均匀分布数组,每组内有5个元素
    
    data16 = data15.astype('int64')###改变数组中元素类型且不改变原数组
    
    data18 = np.random.normal(1,5,(3,5))###生成数组###生成数组
    data18 = data18.astype('int32')###定义生成数组类型
    
    data18 = np.unique(data18)###第一种去重方法
    
    data19 = set(data18.flatten())###第二种去重方法,先变为一维数组再用set
    
    a = np.array([1,2,3])###生成数组
    
    np.repeat(a, [1,2,3])###repeat(数组,元素重复次数,axis改变轴)
    
    np.tile(a, 2)###tile(数组,数组重复次数)
    
    a = np.arange(10).reshape(2,-1)###生成数组
    b = np.repeat(1, 10).reshape(2,-1)###生成数组###生成数组
    
    np.concatenate([a, b], axis=0)###连接函数,前者为要连接的array,axis默认为0,垂直连接。若axis为1,水平连接。
    
    np.vstack([a, b])###垂直方向拼接数组
    
    np.r_[a, b]###不改变列数,按行拼接
    
    np.concatenate([a, b], axis=1)###水平方向拼接数组
    
    np.hstack([a, b])###水平方向拼接数组
    
    np.c_[a, b]###不改变函数,按列拼接
    
    a = np.array([1,2,3,2,3,4,3,4,9,5])###生成数组
    b = np.array([7,2,10,2,7,4,9,4,9,8])###生成数组
    
    np.intersect1d(a,b)###查找数组中相同的元素
    
    np.setdiff1d(a,b)###删除a中有,但b中也有的元素
    
    np.where(a==b)###找出a和b中相同元素的位置,前提两个数组中元素个数必须相同
    
    np.where((a>=5)&(a<=10))###查找大于等于5并且小于等于10的元素
    
    np.where(np.logical_and(a>=5, a<=10))###同上
    
    arr = np.arange(9).reshape(3,3)###生成数组
    
    arr[[2,1,0],:]###改变数组行位置
    
    arr[:,[1,2,0]]###改变数组列位置
    
    arr[::-1]###翻转二维数组的行
    
    arr[:,::-1]###翻转二维数组的列
    
    rand_arr = np.random.random([5,3])
    
    np.set_printoptions(precision=3)###设置打印参数,precision可以规定打印小数点后几位

    逻辑运算

    data20 = np.random.normal(0,0.2,(4,5))###生成平均分布数组
    print('data20:',data20)
    print('判断涨幅是否大于0.1,是则True,否则False:
    ',data20 > 0.1)
    data20[data20 > 0.1] = 1.5###布尔索引以及操作
    print('data20',data20)
    print('np.all用法:',np.all(data20>0.1))###传入一组布尔值,数组中只要有一个是False则返回False,全是True返回True
    print('np.any用法:',np.any(data20>0.1))###传入一组布尔值,数组中只要有一个是True则返回True,全是False返回False
    ###三元运算符np.where
    print('np.where用法:',np.where(data20>0.2,1,0))###np.where(判断条件,True值,False值)
    ###复合逻辑运算np.logical_and和np.logical_or
    print('np.logical_and用法:',np.logical_and(data20>0,data20<0.5))###筛选大于0并且小于0.5的元素
    print('np.logical_or用法:',np.logical_or(data20>0.5,data20<0.8))###筛选大于0.5或者低于0.8的元素

    运行结果参考:

    data20: [[ 5.812e-02 -2.305e-01 -4.702e-01  1.898e-01  8.838e-02]
     [ 1.626e-01  3.250e-03 -1.356e-01 -1.514e-01  1.343e-01]
     [-3.071e-02 -2.933e-02  1.320e-01 -1.521e-01  6.943e-02]
     [ 2.776e-01 -8.821e-05 -4.295e-02  2.106e-01  1.786e-01]]
    判断涨幅是否大于0.1,是则True,否则False:
     [[False False False  True False]
     [ True False False False  True]
     [False False  True False False]
     [ True False False  True  True]]
    data20 [[ 5.812e-02 -2.305e-01 -4.702e-01  1.500e+00  8.838e-02]
     [ 1.500e+00  3.250e-03 -1.356e-01 -1.514e-01  1.500e+00]
     [-3.071e-02 -2.933e-02  1.500e+00 -1.521e-01  6.943e-02]
     [ 1.500e+00 -8.821e-05 -4.295e-02  1.500e+00  1.500e+00]]
    np.all用法: False
    np.any用法: True
    np.where用法: [[0 0 0 1 0]
     [1 0 0 0 1]
     [0 0 1 0 0]
     [1 0 0 1 1]]
    np.logical_and用法: [[ True False False False  True]
     [False  True False False False]
     [False False False False  True]
     [False False False False False]]
    np.logical_or用法: [[ True  True  True  True  True]
     [ True  True  True  True  True]
     [ True  True  True  True  True]
     [ True  True  True  True  True]]

      

    统计运算

    temp = np.random.uniform(1,-0.5,(4,4))###生成数组
    np.max(temp,axis=0)###求数组中最大值,若不加axis则求所有元素最大值,axis=0求出每列最大值,axis=1或-1求出每行最大值
    np.min(temp,axis=0)###求数组中最小值,若不加axis则求所有元素最小值,axis=0求出每列最小值,axis=1或-1求出每行最小值
    np.mean(temp)###求平均值
    np.median(temp)###求中位数
    np.var(temp)###求方差
    np.std(temp)###求标准差

    数组间运算 

    ###数组与数之间的运算,每个元素都与之进行运算
    array = np.arange(5)
    array + 1
    array * 2
    array / 2
    
    ###数组与数组之间的运算
    ###广播机制,为了方便不同形状的数组之间运算(当操作两个数组时,numpy会逐个比较它们的形状。只有在维度相同或者形状对应位置有一个是1才能进行运算)
    ###能进行运算的数组
    a = np.arange(6).reshape(2,3)###两行三列
    b = np.arange(2).reshape(2,1)###两行一列
    a + b###两个数组中,分别满足相同维度行,对应有一列为1,所以可以进行运算
  • 相关阅读:
    slf4j绑定log4j失败
    [转]activiti5用户任务分配
    关于ajax提交的公共接口的一大用处
    jQuery插件开发方式
    centos7安装mysql
    Centos7安装JDK
    奇葩问题:spring+mybaits项目突然出现其中一些Mapper类找不到
    JAVA多线程下,获取递增的序列号
    库存扣减的流水账记录问题
    My97DatePicker使用的问题
  • 原文地址:https://www.cnblogs.com/ikww/p/11526481.html
Copyright © 2020-2023  润新知