美文网首页
定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿

定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿

作者: Tufeng | 来源:发表于2019-07-27 16:59 被阅读0次

    通过字符串参数来指定

    np. zeros(10,dtype="int16")

    通过numpy对象来指定

    no. zeros(10,dtype=no.int16)

    数组的一些通俗说法

    属性:

    数组的纬度,ar. ndim

    数组每个纬度的大小,ar. shape

    数组的总大小,ar. size

    数组的类型,at.dtype

    数组每个元素字节大小,at. itemsize

    数组总字节大小,at. nbytes,等于上两个乘积

    numpy数组是固定类型的,如果将一个浮点型值插入一个整型数组时,浮点值会被截断成整型。不会有警告。

    数组切片:获取子数组slice

    获取数组内单个元素的方法:ar[1]

    用切片来获取子数组,与python切片语法一样

    x[start,stop,step] 默认值为[0,整个size,1]

    多维数组:[行,列]行列就是一维数组的方式

    多维数组,切片为子数组

    获取数组,单行单列的方法

    列ar[:,1]行ar[1,:],行可以省略为ar[1]

    :切片返回的是,数组数据的,视图。而不是数值数据的副本。视图的意思,就是就算你把切片结果的子数组赋值给一个变量了,但是这个变量指向还是原来的数据,修改这个变量,原始数据也会被修改。

    创建副本,就用ar. copy(),这时,修改子数组,就不会把原数据更改掉。

    ar. reshape((x,y))返回的也是非副本视图,指向同一组数据。

    定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿 - 草稿 索引定位,和切片区别

    解释:二维数组里面,[1,1]的话,就是,最外层index为1的数组,然后,在这个数组内再选择index为1的元素。[1,:1]就是在被选择后的数组内,就行切片,切片是从0开始,前闭后开,切出来的是index为0的元素形成的新数组。也就是说没有:的时候,选择的是元素,有:的时候,切出来的是一个子数组。

    如果只是修改元素值,不用切片,直接用元素的索引。本图片用的是1比较特殊。所以会出现好像都选的是元素的错觉。

    将一个一纬数组变形为,二维的行或者列的矩阵。

    一维数组变形为矩阵

    从上图可以看到,二维数组,就是一个矩阵。特别是从转换成列矩阵的时候,加了逗号。

    矩阵的定义

    数组的分裂

    x=[1,2,3,99,99,3,2,1]

    x1,x2,x3=np. split(x,[3,5])

    切片都不包含后面的

    slice 切成片  split使分解

    雷同vsplit和hsplit

    Numpy数组计算:通用函数

    使Numpy变快的关键是利用向量化操作。

    用seed(x)x可以为0到任何整数,设置np. random. seed(x)以后,下面每一次执行随机生成的值都是一样,并且x设置为任何数,得到随机生成的值都是一样的。参看seed(0)和seed(500)的结果。

    另外我想这样设置的目的是:在生成一笔数据的时候,我们可以用randint()这个函数,不用手打,此时我们得到的是随机产生的一组数据。

    设置seed()之后呢,这个随机产生的数据相当于固定了。这样如果后面的程序要验证同一组数据的一些结果,就可以直接拿来用。每次导进来的数据都是一样的,且这组数据是随机产生的。

    seed()函数 seed(500) seed(0)

    empty()创建的是没有意义的空置。生成的值是随机的。

    np. empty(x)/np.empty([x,y])

    测试代码运行时间,%timeit 代码

    NumPy通用函数

    通用函数有两种存在形式:一元通用函数,二元通用函数。一元通用函数是,对单个输入操作。二元通用函数是对两个输入进行操作。

    1、数组的运算。利用了python的原生运算符,标准的,加减乘除都可以用。及,逻辑非,指数**,模(余数)运算符%,地板除法运算符//,。都是一元通用函数。

    2、绝对值。Python绝对值abs(x)。对应Numpy通用函数是np. absolute(x),也可以用别名,np. abs(x)

    复数的幅度:复数的实部和虚部平方和再开方

    复数的幅度

    3、三角函数

    求三角函数

    180度=pi

    求逆三角函数

    4、指数和对数运算

    指数运算

    exp(x)指e的x次幂

    exp2(x)指2的x次幂

    power(3,x)指3的x次幂

    对数运算

    5、专用通用函数

    from scipy import special 包含了,很全的通用数学函数运算,包括统计学很多的运算。搜索,gamma function python

    2.3.4高级的通用函数特性

    1.指定输出

    在进行大量运算的时候,指定一个存放运算结果的的数组是非常有用的。所有的通用函数都可以用out 参数来指定计算结果的存放位置。

    第一种,直接复制。占用大量内存。

    直接设置变量储存 打印结果

    第二种,使用out参数储存。内存占用较小。

    out参数 out结果

    注意:第一种用的empty(),生成的数组内元素是科学记数法,第二种用的zeros(),生成的数组内元素,是float型。

    如果不需要调格,直接out=y

    2.聚合

    二元通用函数,有聚合功能。比如,一样用一个,特定的运算,reduce,一个数组。可以对任何一个通用函数调用reduce()方法。一个reduce方法,会对给定的元素和操作,重复执行,直到得到单个结果。

    例如,对add函数,调用reduce方法,,会返回数组中所有元素的和。

    x = np. arange(1,6)

    np. add. reduce(x)

    #结果是15

    如果需要存储每次计算的中间结果,使用accumulate

    np. add.accumulate(x)

    #结果是[1,3,6,10,15]

    3.外积

    任何通用函数,可以用outet方法,获取不同数组的,所有元素,对函数运算的,结果。

    x=np. arange(1,6)

    np. multiply.outer(x,x)

    outer()方法的结果:乘法表

    广播

    通用函数另一个非常有用的特性,是它能操作不同大小和形状数组。一组这样的操作,被称为:广播。

    通用函数更多的信息可以在,www.numpy.org和www.scipy.org找到

    2.4聚合

    最大值,最小值,其他值

    数组值求合,sum(ar)/np.sum(ar)是在编译码中进行,更快。

    最大值max(ar)最小值min(ar),np中也有对应的,且更快。

    np中,可以直接调用。ar. min()

    1.多纬度聚合。使用参数axis=1/0参数

    ar. min(axis=0)。axis关键字,指定的是数组将会被折叠的纬度,axis=0表示,在水平方向上折叠。也意味着每一列的值都将被聚合。

    np. percentile(ar,25)四分之一位

    np. percentile(ar)中位数

    np. percentile(ar,75)四分之三位

    2.5数组的计算:广播

    向量化操作:1、通过Numpy通用函数。减少python循环2、利用Numpy广播功能。

    广播:简单理解为,用于不同大小数组的,二进制通用函数(加,减,乘等)的一组规则。

    对于同样大小的数组,二进制的操作是对相应的元素进行逐个计算。

    广播允许这些二进制操作可以用于不同大小的数组。例如,可以简单地将一个标量(可以看成一个0维的数组),和一个数组相加。

    a=[0,1,2]

    print(a+5)

    #[5,6,7]可以理解为,将数值5扩展或重复至数组[5,5,5]进行加法操作。实际上这个重复并没有发生。不占用计算。

    实际上广播就是,扩展,把要操作的两个数组,扩展到相同的纬度,两个形状一致后,进行运算。

    一维数组加二维数组

    这里这个一维数组就被扩展或者,广播了。

    [[0,1,2],

    [0,1,2],

    [0,1,2]]然后再对应相加。

    双向扩展

    [[0,1,2],

    [0,1,2],

    [0,1,2]]加上

    [[0,0,0],

    [1,1,1],

    [2,2,2]]

    这里就将两个数组都扩展成一个公共的形状。

    广播可视化理解

    广播的规则

    定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿 - 草稿 定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿 - 草稿

    广播就是,维度的匹配。

    不匹配规则的广播

    广播的规则,对于任意二进制通用函数都是适用的。

    数组归一化

    可视化时:

    plt. hist(ar,30)#30指的是分组数

    对数组进行,大于小于等于不等于大于等于小于等于,某个值,都会的到一个布尔型数据组成的数组。

    操作布尔数组

    np. random. RandonState(0)和np. random. seed(0)两种确定随机数的区别

    numpy.random.RandomState()或者numpy.random.RandomState(seed=None)

    每次生成数字不一样。

    numpy.random.RandomState(1)或者numpy.random.RandomState(seed=1)

    每次生成的数字一样。1,2仅仅是来源于1号种子,还是2号种子

    存在一个数组,ar

    np. count_nonzero(ar<6)。得到,ar<6这个布尔数组,里面 true的个数。

    np. sum(ar<6)#得到和上面一样的结果,并且,sum和其他聚合函数一样,可以沿着行或者列进行。

    np. sum(ar<6,axis=1)#每一行小于6的个数

    要快速检查任意np.any(ar>6),或者全部np. all(ar>6)都是返回一个值。也都可以用axis设置特定坐标轴。np. any(x>6,axis=1)沿着横轴。

    axis=0/1详解

    2.布尔运算符。逐位逻辑运算符(也叫逻辑运算符)(&、|、^、~),来进行,逐位运算(通常是布尔运算)

    逻辑运算符 逻辑异或,真值表

    异或XOR ,在英文里面的定义为either one (is one), but not both, 也即只有一个为真(1)时,取真(1)

    跟或的区别是,1 or 1 结果为true

    将布尔数组作为掩码

    ar#数组

    ar>5#得到布尔数组

    ar[ar>5]#掩码操作,将符合条件的选择出来

    ar>5的数组就相当于一个掩码数组。

    关键字and/or 逻辑操作运算符&及  | 区别

    and和or判断的是两个对象,每个对象,它整个对象是真还是假表达式操作的是整个对象,把这个对象当做布尔实体,非0都是true。

    &和|判断的是,两个对象,每个对象,它的比特位。表达式操作的是元素的比特,将and和or运用于,组成改元素的每个比特。

    bin()函数

    上图用&和|进行运算时,对应的二进制比特位进行比较,以得到最终结果。

    Python中的bin()方法的作用:

    是将整型转换为二进制数组成的字符串,注意它的结果是个字符串,且转换后的最高位非零(如bin(1)=‘0b1’,而非‘0b01’),并在前面加上0b,表示这是一个二进制。

    当对两个布尔型数组进行操作的时候,用|和&,如果用and或or就会出错。

    因为,and和or对整个对象执行单个布尔运算,而&和I对一个对象的内容(单个比特或字节)执行多个布尔运算。

    其他索引类型

    索引的五种方式(花哨索引) 组合索引

    np.random.randint(a,size=None,replace=True,p=None)

    a,是从哪里选

    size是选择的个数

    replace为true的意思是,size设置为任意正值,false的意思是,size的值不能比原来a的长度len(a)大。

    #在(0,5)区间内生成含5个数据的一维数组

    >>a = np.random.randint(0, 5, (5,))

    >>print('a = ', a)

        a =  [2 1 2 1 3]

    #在a数组中抽取6个数,replace为true

    >>b = np.random.choice(a, 6)

    >>print('b = ', b)

        b =  [1 1 2 2 1]

    #replace为False时,size需小于等于len(a)

    >>c = np.random.choice(a, 5, replace=False, p=None)

    >>print('c = ', c)

        c =  [3 2 1 1 2]

    #p是数组a中所有数出现的概率,总和为1

    >>d = np.random.choice(a, 5, replace=False, p=[0.2, 0.3, 0.1, 0.3, 0.1])

    >>print('d = ', d)

        d =  [1 3 2 1 2]

    np.savetxt('ceshi.txt',ar,fmt = '%0f',delimiter=',')

    #数字格式化  https://www.runoob.com/python/att-string-format.html

    np.newaxis终极解释 关于理解,数据科学手册,第42页,还有广播的部分,及79页相临点进行求距离的部分。

    相关文章

      网友评论

          本文标题:定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿

          本文链接:https://www.haomeiwen.com/subject/mxverctx.html