zoukankan      html  css  js  c++  java
  • NumPy笔记

      最近在看《利用Python进行数据分析》这本书,也会在网上查看一些资料,所以会对某些感觉比较重要的部分进行总结,一方面加深自己对一些方法的记忆,一方面方便自己以后的大总结。

      基本概念:

      Numpy(Numerical Python)是高性能科学计算和数据分析的基础包
      NumPy的ndarray:多维数组对象,快速灵活的大数据集容器
      所有元素必须是同类型

      可以查看官方文档https://docs.scipy.org/doc/numpy/reference/routines.html,也可以到http://download.csdn.net/download/nsguf/9944297进行下载。

      以下源码下载:https://github.com/NSGUF/PythonLeaning

     常用属性:

    print(np.version.version)#numpy的版本
    
    data1=[1,2,3,4]
    arr1=np.array(data1)
    print(arr1)
    data2=[[1,2,3,4],[5,6,7,8]]
    arr2=np.array(data2)
    print(arr2)
    
    print("------------属性---------------")
    print(arr2.ndim)#数组的维数
    print(arr2.shape)#数组的维度
    print(arr2.size)#数组的元素总个数
    print(arr2.dtype)#数组中元素的类型
    print(arr2.itemsize)#数组中每个元素的字节大小
    print(arr2.data)#实际数组元素的缓冲区
    #NumPy自带了很多数据类型比如int16,int32等,取值时可用np.int16
    #NumPy的转换方式为
    print(np.int32(12.123))
    

      创建数组的方法:

    print("------------创建数组的方法--------------")
    print(np.ones((2,3,4),dtype=np.int16))#全为1的多维数组
    print(np.empty((2,3)))#为空的多位数组,只分配内存,不初始化,所以运行速度快
    print(np.full(4,np.pi))#初始化为指定值
    print(np.random.random((2,3)))#生成shape为2,3的随机数组
    print(np.arange(10,30,5))#以10开始差值为5的等差数列,不包含30
    print(np.linspace(10,30,4))#第一个数为10,最后一个数为30,取5个等差数 
    print(np.logspace(0,2,5))#等比数列,从10^0到10^2中5个数
    print(np.arange(4))#相当下面的式子
    print(np.arange(0,4,1))
    print(np.arange(12).reshape(4,3))#更换成shape为4,3
    a=np.arange(24).reshape(2,3,4)
    #print(a.resize(24))#resize作用与reshape相同,但是调用resize将会改变自身,reshape不会
    b=np.arange(4)
    print(a)#shape为2,3,4,ps:总个数必须为shape的乘积,否则报错
    print(a[1,...])#等同于a[1]
    print(a[1])#第2个整列
    print(a[0,1])#取第一整列的第三列
    print(a[1,1,1])#第2大列的第2行的第2列,一个元素
    

      对数组进行操作和运算:

    print("------------对数组进行操作--------------")
    c=a-b#加减乘除都可,将元素分别对应加减乘除,shape必须对应,除的话注意除数为0的情况
    print(c)
    print(a**2)#会对数组每个元素进行处理,也可进行一下方法遍历
    print(a.sum())#总和
    print(a.min())#最小的数
    print(a.max())#最大的数
    print(a.cumsum())#获取每个数的前n的和,比如前1个位0,前2个位0+1,前3个位0+1+2以此类推
    d=np.arange(12).reshape(3,4)
    print(d.sum(axis=-2))#总和
    print(d.min(axis=0))#最小的数
    print(d.max(axis=-1))#最大的数
    print(d.mean())#算术平均数
    print(d.std())#标准差
    print(d.var())#方差
    print(d.argmin())#最小索引
    print(d.argmax())#最大索引
    print(d.repeat(5))#重复
    print(np.power(b,3))#b的3次方
    print(np.repeat(3, 4))#创建一个一维数组,元素为3,重复4次
    print(d.cumsum(axis=1))#获取每个数的前n的和,比如前1个位0,前2个位0+1,前3个位0+1+2以此类推
    print(d.cumprod())#所有元素的累积积
    #总结:当没有axis参数的时候,默认为全部元素,当值为0或-2时,表示每个列中的第一个数,当值为1或-1时,表示以列做运算,其他值则报错
    s=np.array([4,3,1,45,2,1,23])
    s.sort()#排序
    print(np.unique(s))#找出唯一值并排序
    

      布尔值数组方法:

    print("------------布尔值数组方法--------------")
    bools=np.array([False,False,True,False])
    print(bools.any())#是否存在一个或多个True
    print(bools.all())#全是True
    print(a.ravel())#将shape值设为(元素总个数),相当于a.reshape(a.size)
    print(a.ravel().shape)
    print(np.sin(a))
    print(np.floor(a))#向上取整
    c=a.copy()#深拷贝
    print(c is a)
    print(a)
    

      对数组进行遍历的方式:

    print("------------对数组进行遍历--------------")
    for row in a:#遍历行
        print(row)
    for element in a.flat:#遍历每个元素
        print(element)
    

      数组文件的输入输出:

    print("------------数组文件输入输出--------------")
    np.save("save_a.npy",a)#将数组以.npy扩展名存入磁盘
    np.load("save_a.npy")
    np.savez('array_a_b.npz',a=a,b=b)#将a和b一起存储
    arch=np.load('array_a_b.npz')
    print(arch['b'])#获取b数组
    np.savetxt("text_b.txt",b,delimiter=',')#写入txt文件,以,为分隔符
    arr=np.loadtxt("text_a.txt",delimiter=',')#读取txt文件,以,为分隔符
    print(arr)
    

      对线性代数的一些方法,对矩阵的操作:

    print("----------------------线性代数-------------------------")
    print(np.dot(a,b))#矩阵相乘
    print(a.transpose())#转置
    print(np.rot90(a,3))#逆时针选择90度,第二个参数是旋转次数
    print(np.fliplr(a))#纵轴左右翻转
    print(np.flipud(a))#纵轴上下翻转
    print(np.roll(a,1,axis=1))#滚动位移
    print(np.trace(a))#迹,对角线的和
    e=np.array([[1,2,3],[1,2,3],[1,2,3]])
    print(np.diag(e))#以一维数组的形式返回方阵的对角线元素
    print(np.vstack((np.array([[1,1],[1,1]]),np.array([[1,0],[0,1]]))))#合并
    print(np.hstack((np.array([[1,1],[1,1]]),np.array([[1,0],[0,1]]))))#合并后翻转,如果只有一个参数,则是把该参数的合并成一行
    

      随机数的生成:

    print("----------------------随机数生成-------------------------")
    print(np.random.normal(size=(4,4)))#正态分布随机数,生成4*4的数组,和python内置的random相比,np.random快了很多
    print(np.random.binomial(10,0.5,100))#n=10,p=0.5的二项分布
    print(np.random.shuffle(b))#对序列随机排序
    print(np.random.permutation(a))#对a进行乱序并返回一个新的array
    print(np.random.rand(3,2))#均匀分布的样本值
    print(np.random.randint(5,size=(4,3)))#第一个属性为上限表示0-5,
    print(np.random.randn())#正态分布(平均值为0,标准差为1)的样本值
    print(np.random.beta(10,10,size=10))#beta分布

      补充:reshape(-1,2)表示只知道2列,多少行系统根据元素个数自动填写,

         np.random.uniform(x1,x2)表示:从x1到x2中随机采样

         np.random.seed(0)表示设置种子,这句话很抽象,这么说吧,比如我希望一个随机数在全局位置上产生的数是相同的,只要在前面设置一下这段代码即可。就像我们在做别人做过的实验的时候,只要设置的种子和别人一样,产生的数据集也一样,这样可以对比自己和别人的数据结果。

    文章来源:NSGUF,欢迎分享,转载请保留出处
  • 相关阅读:
    loadrunner12-参数化以及参数化关联
    loadrunner--vugen录制脚本提示“无Internet访问。您可能无法录制并执行业务进程”
    loadrunner--web_url函数用法
    loadrunner12-用Chrome如何录制脚本
    LoadRunner--Analysis各项指标详解
    Windows Error Code(windows错误代码详解)
    CentOS 7 (Linux) 下载百度网盘大文件
    博客园cnblogs:自定义页面风格
    Windows Server 2003 添加“Resin”到“服务”出错
    转:mysql分页原理和高效率的mysql分页查询语句
  • 原文地址:https://www.cnblogs.com/NSGUF/p/7406027.html
Copyright © 2011-2022 走看看