• Numpy概述以及ndarray结构


    本篇文章主要包括两部分:

      numpy简介

      array结构介绍

    一.numpy简介

      numpy是pyhon中一个非常常用的科学计算库,它主要用来处理对数组的运算,numpy的绝大部分API都是针对数组的操作,特别是多维数组。

      numpy的底层是一个ndarray结构,我们可以通过numpy.array(list)将一个列表转化为一个ndarry类型的数据结构。我们可以把ndarry结构看成是一个加强版的列表,它的本质仍然是一个列表,只是额外封装了一些方法和属性,使得它比list更加强大(也就是说,list能做的事,ndarray都能做,ndarray能做的事,list就不一定能做。正是有了ndarry结构,使得numpy能像matlab一样方便的操作数组)。与list相比,ndarray有如下特性:

      ndarray类型的数组可以直接加减乘除某一个常数

    import numpy as np
    list=[1,2,3,4]
    array=np.array(list)
    array+1  #对数组中的每一个元素+1
    array*1  #对数组中每一个元素*1
    array/2
    array-1

      上面的操作若是对list进行,则会报错.

    二.ndarray结构

    1.numpy.array(list)将list转为array结构

    import numpy as np
    list=[1,2,3,4,5,6,7]
    array=np.array(list)

    2.为了方便数组的计算,ndarray中的数据类型应该是一致的,这与list有区别,如果在创建ndarray时,数据类型不一致,会自动向下转化为相同的数据类型

    list=[1,2,3,4,5,6]
    array=np.array(list) #list的数据类型都是int型,因此array的数据类型是int
    
    list=[1,2.9,4.5,4.7]
    array=np.array(list) #list的数据包含int和浮点型,array会自动把数据全部转为浮点型
    
    list=[1,2,'uh',4]
    array=np.array(list)  #list的数据中包含int和字符串,array会全部把数据转为字符串

    3.ndarray基本属性操作

    array=np.array([[1,2,3],
                     [3,4,5]])
    
    type(array)   #返回array的数据类型(numpy.ndarray)
    
    array.dtype  #返回array数组中的数据的数据类型
    
    array.itemsize #数组中每一个数据所占的字节
    
    array.shape  #数组的结构,返回一个元组,元组中的每一个数据代表着数组在每一维有多少个数据
    
    array.size   #数组中元素的总个数
    
    array.ndim  #返回数组的维度,即数组总共有多少维
    
    array.fill(0) #用0来填充array,即将array的所有数据都变成0

    4.ndarray的切片

      ndarray的切片操作和list的切片操作类似:

    #######################################索引与切片操作
    
    #1.一维矩阵的索引和切片操作与list完全一致
    list=[1,2,3,4,5,6,8]
    array=np.array(list)
    array[0]   #返回索引为0的值(1)
    
    array[1:5]  #返回索引从1到5的值(不包括5)
     
    array[-1]   #返回最后一个元素
    
    
    #2.多维矩阵的索引和切片操作与list类似
    list=[[1,2,3],
          [4,5,6],
          [7,8,9]]
    array=np.array(list)
    array[0]    #返回索引为0的值,即第一行的元素(想想list[0]会返回什么值,这里是一致的)
    array[1,1]  #返回第二行第二列的元素(索引从0开始)
    array[:,1] #返回第二列元素
    array[:2]  #返回前两行元素(注意区分有逗号和没有逗号的区别)
    
    array[1,1]=10  #可以根据索引直接修改该位置的数据(与list一致)
    
    array[0,0:2]  #可以结合索引和切片来查找矩阵中某些特定位置的数据,需要记住,矩阵的不同的维度是根据逗号分隔的
    
    
    
    #3.矩阵的复制有深浅拷贝之分
    array1=array  #浅拷贝,array1只是拷贝了array的一个引用,两个变量指向同一块内存(指向同一个矩阵),操作一个变量,另外一个变量值也会改变
    array1[1,1]=10  #将array1的第二行第二列元素改为10,因为array1和array实际上指向同一个矩阵,因此array的第二行第二列元素也会变成10
    
    array1=array.copy()  #深拷贝,array1和array是两个完全独立的矩阵,操作一个矩阵不会影响另外一个矩阵
    array1[1,1]=100    #将array1的第二行第二列改为100,因为array1和array两个矩阵是相互独立的,因此array第二行第二列元素还是10,不会变成100
    
    
    #4.arange函数和random.rand函数,根据布尔值来筛选数据
    
    ####arange函数的用法和range函数相同,两者区别在于,arange生成的是一个ndarray矩阵,range生成的是一个list
    array=np.arange(0,100,10)#返回 array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
    
    ##生成一个布尔类型的矩阵
    
    mask=np.array([0,1,0,1,1,0,0,1,0,1],dtype=bool)
    
    ##根据mask来筛选矩阵中的数据,返回array中以mask中值为1的索引作为索引的对应的值
    ####注意:mask的元素个数必须与array中元素个数相同,即mask.size==array.size
    array[mask]  #返回array([10, 30, 40, 70, 90])
    
    ##除了自己定义一个bool矩阵之外,还可以利用array的数据大小来生成bool矩阵
    mask=array>50 #mask是一个和array有着相同size的矩阵,若array[i]的值大于50,则mask[i]为true,否则为false
    array[mask]   #使用这种方法可以很方便的在array矩阵中筛选出符合我们想要的数据
    np.where(array>50)  #使用where方法可以查看符合条件的元素的位置
    
    
    ##random.rand()函数
    
    #arry=np.random.rand(10)  #生成一个size=10的一维矩阵,矩阵的每一个元素的值在0-1之间
    View Code

    5.ndarry中元素的数据类型转换

    #在创建矩阵时,可以通过指定dtype属性来指定矩阵数据的数据类型
    
    array=np.array([1,2,3,4,5],dtype=np.float32)   #指定生成的数据是32位的浮点类型
    array.nbytes    #计算矩阵的总共字节数(5*4=20)
    
    
    ##前面说过,ndarray类型的矩阵会将数据类型统一向下转为同一种类型,如果想让矩阵像list那样,矩阵的元素有不同的数据类型,可以使用object类型
    
    array=np.array([1,2,'stre',4],dtype=np.object)  #生成的矩阵既有int类型的数据,又有字符串类型的数据
    
    
    #除了可以在创建矩阵时指定dtype属性外,还可以使用asarray(),astype方法来实现矩阵数据类型的转换
    
    array=np.array([1,2,3,4,5])
    array1=np.asarray(array,dtype=np.float32)   #需要注意,这种转换不会改变array的数据类型,因此需要将转换后的矩阵赋给一个新的变量
    array1=array.astype(dtype=np.float32)        #该方法也不会改变array的数据类型
    View Code

      

  • 相关阅读:
    GoogleTest初探(2)
    GoogleTest初探(1)
    GoogleMock初探(0)
    GoogleTest初探(0)
    [leetcode] 二叉树的前序,中序,后续,层次遍历
    关于phpmyadmin报403错误forbidden
    如何使用Fiddler抓取Android手机数据请求
    安全性测试之安装包测试
    二代身份证号码编码规则
    Excel导入功能测试用例整理
  • 原文地址:https://www.cnblogs.com/jiachuantang/p/8946122.html
Copyright © 2020-2023  润新知