AutoLeaders算法组——Numpy库学习笔记

Numpy库

创建数组(numpy.array)

array()

np.array(object,dtype = None, copy = True ,order = None, subok = False, ndmin = 0)

  • object : 数组序列

  • dtype :更改数组的数据类型

  • copy :默认为True

  • order :以哪种内存布局创建数组

  • ndim :数组维度

  • subok:默认为False。为True时,使用object的内部数据类型;为False时:使用object数组的数据类型

    import numpy as np
    np.array([01,2,3,4,5,6,7,8,9])#一维数组
    np.array(range(10))
    np.array([1,2,3],[4,5,6])#二维数组
    np.array([i**2 for i in range(10)])
    

注意:1.当数组内的类型不一样时,结果以str>float>int统 2.当数组嵌套数量不一致时,结果返回一维数组

arr1 = np.array([1,2,3,'4',5.0])
arr2 = np.array([1,2,3],('a','b','c','d'))

arange()

np.arange(start,stop,step,dtype) #生成区间数组

np.arange(1,10,2,dtype = 'int')

内置函数:

1.linspace()创建等差数列

np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

  • start:必填,序列的起始值

  • stop:必填,序列的终止值,如果endpoint为true,该值包含于数列中

  • num:要生成的等步长的样本数量,默认为50

  • endpoint:该值为true时,数列中包含stop值,反正不包含,默认为True

  • retstep:如果为True时,生成的数组中会显示间距(步长),反正不显示

  • dtype:ndarray的数据类型

    np.linspace(0,100,500)
    

2.logspace()创建等比数列

np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)

  • base:对数log的底数,默认为10.0

    np.logspace(0,9,base=2)
    

3.Numpy数组属性

(1)ndarray.ndim

秩,即轴的数量或维度的数量

(2)ndarray.shape

数组的维度,对于矩阵,n行m列

调整维度reshape

返回调整维度后的副本,而不改变原ndarray(要符合数组内的数量

np.arange(20).reshape((4,6))#这是错误的
(3)ndarray.size

数组元素的总个数,相当于.shape中的n*m的值

调整维度resize

如果新数组大于原始数组,则新数组将填充重复副本

a = np.array([1,2],[3,4])
a.resize(a,(2,3))#按顺序填充原数组
a.resize((2,3),refcheck=False)#填充0
(4)ndarray.dtype

ndarray对象的元素类型

(5)ndarray.itemsize

ndarray对象中每个元素的大小,以字节为单位

切片和索引

一维数组

和之前学的一样,略~

二维数组

  • 切片为下一 维度的一个元素,所以是一维数组

  • 二次索引取得,一维数组中的元素

    arr3 = np.arange(20).reshape(4,5)
    arr3[2]#获取第三行的数组
    arr3[2][2]#获取第三行第三列的一个元素
    arr3[2:]#获取第三第四行的数组,为二维数组
    arr3[...:1]#省略号返回所有行元素,反之为列元素
    

索引的高级操作

1.整数数组索引
x = np.array([
        [1,2],
        [3,4]
        [5,6]
    ])
#[0,1,2]代表行索引,[0,1,0]代表列索引(一一对应)    
y = x[[0,1,2],[0,1,0]]#获取x中的(0,0),(1,1),(2,0)的数据
2.布尔数组索引

当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引。

x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
x[x>6]
筛选出指定区间内数据
  • &和

  • |或

    x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
    x[(x>4) & (x<9)]
    x[(x<4) | (x>9)]
    
True和False

True和False的形式表示需要和不需要的数据

arr = np.arange(12).reshape((3,4))
#行变量 存在3个元素
row1 = np.array([False,True,True])
#列变量 存在4个元素
column1 = np.array([True,False,True,False])
#arr是3行,做切片时也要提供3个元素的数组,轴的长度一致
arr[row1]
arr[:,column1]
arr [row1,column]
arr[[False,True,True],[True,False,True,False]]#T和F数量要一致
数组索引及切片改变原数组的数据

与以上相同,略

广播机制

指numpy对不同形状(shape)的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行

  • 如果两个数组a和b形状相同,即满足a.shape == b.shape,那么a*b的结果就是a与b数组对应为相乘。(即要求维数相同,且各维度的长度相同)

    a = np.array([1,2,3,3,4])
    b = np.array([10,20,30,40])
    c = a * b
    
  • 如果维度不相同,形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度

    a = np.array([[0,0,0]
               [10,10,10]
               [20,20,20]
               [30,30,30]])
    b = np.array([1,2,3])
    print(a + b)
    

    注意:

    • 两个数组的大小右对齐后,对应维度里的数值要么相等,要么为1(取大值),要么缺失取大值
    • 除此之外就会报错
      • 数组a大小为(2,1,3)和数组b大小为(4,2)即不能做运算

统计函数

平均值mean()

  • 默认情况下为全部平均值

  • 若要求某一维度的平均值,则设置axis函数,多维数组的元素指定

    • axis = 0 ,将从上往下计算

    • axis = 1 ,将从左往右计算

      a = np.arange(20).reshape((4,5))
      a.mean(axis=0)
      a.mean(axis=1)
      

中位数np.median

a = np.array([1,2,3,5,6,9,18])
np.median(a)

标准差np.std

显示数据的离散程度

a = np.array([95,85,75,65,55,45])
b = np.array([73,72,71,69,68,67])
print(np.std(a))
print(np.std(b))

方差var

同上

a = np.array([95,85,75,65,55,45])
b = np.array([73,72,71,69,68,67])
print(a.var(a))
print(b.var(b))

最大值max

a.max(axis=0)

最小值min

a.min(axis=1)

加权平均值np.average()

即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数

np.average(a,axis=None,weights=None,return=False)

  • weights:数组,可选

    与a中的值关联的是权重数组。a中的每个值都根据其关联的权重对平均值做出贡献。权重数组可以是一堆的(在这种情况下,它的长度必须是沿给定轴的a的大小)或与a具有相同的形状。如果weight=None,则假定a中的所有数据的权重等于1.一维计算是:

    avg = sum(a*weight)/sum(weight)

    a = np.array([80,90,100])
    weights = np.array([0.2,0.3,0.5])
    print(np.average(a,weights = weights))
    

数据类型

浮点型

......dtype = np.float_

字符串型

......dtype = np.str_

等等等…与python基础不一样的是最后要加_

定义结构化数据

  • b:代表布尔型

  • u:无符号整型

  • i:带符号整型(只能是i1,i2,i4,i8)

  • f:浮点型

  • c:复数浮点型

  • m:时间间隔

  • M:日期时间

  • O:python对象

    #首先创建结构化数据类型
    teacher = np.dtype([('name',np.str_,2),('age','i1'),('salary','f4')])#2是大小
    #将其应用于ndarray对象
    b = np.array([('wl',32,8327,59),('lh',28),7856.87],dtype = teacher)
    print(b)
    b['name']#取出全部姓名
    b['age']#取出全部年龄
    

随机函数random

常用函数:

  • rand():生成(0,1)均匀分布随机数
  • randn():生成标准正态分布随机函数
  • randint(low,high,size,dtype):生成随机整数[low,high)
  • sample():生成(0,1)随机数
#创建4行2列的随机数据
np.random.rand(4,2)

随机种子np.random.seed()

使用相同的seed()值,则每次生成的随机数都相同,使得随机数可以预测

np.random.seed(1)
L1 = np.random.randn(3,3)
np.random.seed(1)
L2 = np.random.randn(3,3)

正态分布np.random.normal()

np.random.normal(loc=0.0, scale=1.0, size=None)

作用:返回一个由size指定形状的数组,数组中的值服从μ=loc,a=scale的正态分布

#标准正态分布,3行2列
a = np.random.normal(0,1,(3,2))#均值为0,标准差为1
print(a)

数组的其他函数

  • resize:返回指定形状的新数组
a = np.array([1,2,3],[4,5,6])
b = np.resize(a,(3,3))
c = a.resize((3,3),refcheck=False)#填充0
  • append:将元素添加到数组的末尾

    d = np.append(a,[7,8,9],axis=0)#axis=0时添加的数组元素要与原来相同(列数)
    e = np.append(a,[[5,5,5],[6,6,6]],axis=1)#axis=1时添加的数组个数要和原来的行数相同
    
  • insert:沿规定的轴将元素值插入到指定的元素前

    np.insert(arr,obj(索引值),values(插入值),axis)

    a = np.array([[1,2],[3,4],[5,6]])
    b = np.insert(a,3,[11,12])#没有axis将返回一维数组
    #沿轴0垂直方向
    c = np.insert(a,1,[11],axis=0)
    #沿轴1水平方向
    d = np.insert(a,1,11,axis=1)
    
  • delete:删掉某个轴上的子数组,并返回删除后的新数组(不能使用切片)

    a = np.arange(12).reshape(3,4)
    b = np.delete(a,1,axis=1)#若不提供axis,则返回一维数组
    
  • argwhere:返回数组内符合条件的元素的索引值

    该函数返回数组中非0元素的索引,若是多维数组则返回行,列索引组成的索引坐标

    c = np.argwhere(a>1)
    print(c)
    
  • unique:用于删除数组中重复的元素,并按元素值由大道小返回一个新数组

  • sort():对输入数组执行排序,并返回一个数组副本

  • argsort:沿着指定的轴,对输入数组的元素值进行排序,并返回排序后的元素索引数组

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值