美文网首页
2.Python numpy笔记(利用数组进行快速向量化运算)

2.Python numpy笔记(利用数组进行快速向量化运算)

作者: Louis_Duan | 来源:发表于2018-11-07 20:41 被阅读0次

    1 matplotlib(工具包)

    使用numpy进行数组运算,并调用其他Python库来实现硬件交互。其核心是一套由对象构成的绘图API。
    matplotlib.pyplot
    模块中有一套完全仿照MATLAB的函数形式的绘图接口。

    from  numpy import *
    from  matplotlib.pyplot import *
    

    1.1 scatter画散点图

    matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
                             vmin=None, vmax=None, alpha=None, linewidths=None, verts=None,
                             edgecolors=None, hold=None, data=None, **kwargs)
    
    s:调节形状的大小,当s的长度和x一样时,表示x中的每一个点对应s中的一个点。
    c:调节形状的颜色,可以是一个序列,
    marker:形状
    linewidth:线宽
    

    2. random模块

    2.1 Python中的random模块

    random.random():用于生成一个0到1的随机浮点数,区间左闭右开
    random.uniform(a,b):用于生成一个指定范围内的随机浮点数,两边都是闭区间
    random.randint(a,b):用于生成一个指定范围内的整数,两边都是闭区间
    random.randrange([start],stop[,step]):从指定范围内,按指定基数递增的集合中获取一个随机数。
    random.choice(sequence):从序列中获取一个随机元素。
    random.shuffle():将一个列表中的元素打乱。
    random.sample(sequence,k):从指定序列中随机获取指定长度片段,不会修改原有序列。
    

    2.2 numpy 中的random

    numpy.random.seed()与numpy.random.RandomState(),两者实现的作用是一样的,都是使每次生成的随机数一样。

    >>> import numpy as np
    >>> np.random.seed(10)
    >>> np.random.rand(8)
    array([0.77132064, 0.02075195, 0.63364823, 0.74880388, 0.49850701,
           0.22479665, 0.19806286, 0.76053071])
    >>> np.random.seed(10)
    >>> np.random.rand(8)
    array([0.77132064, 0.02075195, 0.63364823, 0.74880388, 0.49850701,
           0.22479665, 0.19806286, 0.76053071])
    
    numpy.random.rand(d0, d1, d2, d3,...dn):以给定的形状创建一个数组,并在数组中加入在[0,1]之间
    均匀分布的随机样本。 
    numpy.random.randn(d0, d1, d2, d3,....dn):以给定的形状创建一个数组,数组元素来符合标准正态
    分布N(0,1)。
    numpy.random.randint() :生成在左闭右开区间上离散均匀分布的整数值。
    numpy.random.random_integers() :生成在左右两边都是闭区间上离散均匀分布的整数值。
    numpy.random.random_sample() :以给定形状返回0,1之间(左闭右开)的随机浮点数
    

    numpy.random.choice(a,size=None,replace=True,p=None)

    numpy.random.choice() :若a为数组,则从a中选取元素;若a为单个int类型数,则选取range(a)中的数 
    replace是bool类型,为True,则选取的元素会出现重复;反之不会出现重复 p为数组,里面存放选到每个数
    的可能性,即概率 。
    

    3 生成数组的函数

    arange()左闭右开

    arange([start,] stop[, step,], dtype=None)        
    产生一个在区间 [start, stop) 之间,以 step 为间隔的数组
    

    linspace()左闭右闭

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

    在指定的间隔内返回均匀间隔的数字。返回num均匀分布的样本,在[start, stop]。
    num:产生数据的个数。
    endpoint:默认为True,包括断点。为‘False’时,不包括最后的端点。
    retstep:默认为False,不显示步长。

    4 数组属性方法总结

    4.1 基本属性

    a.dtype 数组元素类型 float32,uint8,...
    a.shape 数组形状 (m,n,o,...)
    a.size  数组元素数
    a.itemsize  每个元素占字节数
    a.nbytes    所有元素占的字节
    a.ndim  数组维度
    

    4.2 形状相关

    a.flat        所有元素的迭代器
    a.flatten()   将多维数组转化为一维数组,返回一个1维数组的复制
    a.ravel()     返回一个1维数组,高效
    a.resize(new_size)  改变形状
    a.reshape()                 它不会修改原来数组的值,而是返回一个新的数组
    a.swapaxes(axis1, axis2)    交换两个维度的位置
    a.transpose(*axex)          交换所有维度的位置
    a.T                    转置,转置返回的是对原数组的另一种view,所以改变转置会改变原来数组的值。
    a.transpose()
    a.squeeze()                 去除所有长度为1的维度
    a.diagonal()                返回数组a的对角线
    

    4.3 填充复制

    a.copy()    返回数组的一个复制
    a.fill(value)   将数组的元组设置为特定值
    

    4.4 转化

    a.tolist()  将数组转化为列表
    a.tostring()    转换为字符串
    a.astype(dtype) 转化为指定类型
    a.byteswap(False)   转换大小字节序
    a.view(type_or_dtype)   生成一个使用相同内存,但使用不同的表示方法的数组
    

    4.5 复数

    a.imag  虚部
    a.real  实部
    a.conjugate()   复共轭
    a.conj()    复共轭(缩写)
    

    4.6 保存

    a.dump(file)    将二进制数据存在file中
    a.dump()    将二进制数据表示成字符串
    a.tofile(fid, sep="",format="%s")   格式化ASCⅡ码写入文件
    

    4.7 查找排序

    a.nonzero()         返回所有非零元素的索引
    a.sort(axis=-1)     沿某个轴排序,对于二维数组,默认相当于对每一行进行排序:
    a.argsort(axis=-1)  沿某个轴,返回按排序的索引
    a.searchsorted(b)   返回将b中元素插入a后能保持有序的索引值
    

    4.8 元素数学操作

    a.clip(low, high)   将数值限制在一定范围内
    a.round(decimals=0) 近似到指定精度,decimals=1,保留一位小数
    a.cumsum(axis=None) 累加和
    a.cumprod(axis=None)    累乘积
    

    4.9 约简操作

    a.sum(axis=None)    求和,axis可以指定沿哪个方向进行求和
    a.prod(axis=None)   求积
    a.min(axis=None)    最小值
    a.max(axis=None)    最大值
    a.argmin(axis=None) 最小值索引
    a.argmax(axis=None) 最大值索引
    a.ptp(axis=None)    最大值减最小值
    a.mean(axis=None)   平均值
    a.std(axis=None)    标准差
    a.var(axis=None)    方差
    a.any(axis=None)    只要有一个不为0,返回真,逻辑或
    a.all(axis=None)    所有都不为0,返回真,逻辑与
    

    5 choose 函数实现条件筛选

    np.choose(a, choices, out=None, mode='raise'):按照序号a对choices中的数进行选择。
    
    >>control = np.array([[1,0,1],
                        [2,1,0],
                        [1,2,2]])
    
    >>np.choose(control, [10, 11, 12])
    
    >>array([[11, 10, 11],
           [12, 11, 10],
           [11, 12, 12]])
    

    6 数组读写

    对于文本文件,推荐使用

    loadtxt
    genfromtxt
    savetxt
    

    对于二进制文本文件,推荐使用

    save
    load
    savez
    

    6.1 数组的读取

    loadtxt函数

    loadtxt(fname,  dtype=<type 'float'>,  comments='#', delimiter=None, converters=None, 
            skiprows=0, usecols=None, unpack=False, ndmin=0)
    
    

    genfromtxt函数
    能处理更多的情况,但相应的速度和效率会慢一些。

    genfromtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, 
               skiprows=0, skip_header=0, skip_footer=0, converters=None, 
               missing='', missing_values=None, filling_values=None, usecols=None, 
               names=None, excludelist=None, deletechars=None, replace_space='_', 
               autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, 
               usemask=False, loose=True, invalid_raise=True)
    

    参数说明

    delimiter:              按照指定格式分割字符,缺省值为任何空白字符,如空格、制表符(\t)
    autostrip:              默认情况下,当一行被分解为一系列字符串时,各个条目不会被删除前导或者尾随的空格。通过
                             将autostrip设置为True,可以覆盖此行为。
    comments:               用于定义标记注释开始的字符串。默认为'#'开始。忽略注释标记后的任何字符。
    fname:                  要读取的文件名
    skiprows:               要跳过的行数,可以用来读写含有标题的文本
    usecols(0,2)             是指只使用0,2两列
    unpack:                 把每列当成一个向量输出,而不是合并在一起
    converters:             对数据进行预处理converters={0:add_one},表示第零列使用函数
                             add_one进行预处理
    skip_header:            跳过开头的特定行数
    skip_footer:            跳过倒数的特定行数
    names:                  当其值为True时,就算标题被注释掉,也会从第一行读取名称
    missing_values:         标记缺失的值
    filling_values:         替换已标记的缺失的值
    

    6.2 将数组写入文件

    savetxt

    numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', 
                  comments='# ', encoding=None)
    

    6.3 numpy二进制格式

    数组可以储存为二进制格式,单个的数组保存为.npy格式,多个数组保存为.npz格式。
    保存方法:

    save(file, arr)                           保存单个数组,.npy 格式
    savez(file, *args, **kwds)                保存多个数组,无压缩的 .npz 格式
    savez_compressed(file, *args, **kwds)     保存多个数组,有压缩的 .npz 格式
    

    读取方法:

    load(file, mmap_mode=None)     对于 .npy,返回保存的数组,对于 .npz,返回一个名称-数组
                                   对组成的字典。
    

    相关文章

      网友评论

          本文标题:2.Python numpy笔记(利用数组进行快速向量化运算)

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