numpy基本入门操作汇总一

    xiaoxiao2021-04-12  35

    本文是学习《利用python进行数据分析》的部分笔记,在这里感谢作者。

    Numpy是高性能科学计算和数据分析的基础包,在这里只罗列一些numpy的常用功能。

    一:导入Numpy:

     

    import numpy as np

    它是一个N维的数组对象,也就是说,其中的元素必须是同类型的。

     

    二:创建ndarray

    使用array函数,参数是一切序列化的对象,比如:

     

    data1=[6,7.5,8,0,1] >>> arr1=np.array(data1) >>> arr1 array([ 6. , 7.5, 8. , 0. , 1. ])

    嵌套序列会被转换成为一个多维数组:

     

     

    >>> data2=[[1,2,3,4],[5,6,7,8]] >>> arr2=np.array(data2) >>> arr2 array([[1, 2, 3, 4], [5, 6, 7, 8]])

    shape函数可以返回各维度大小

     

     

    >>> arr2.shape (2, 4)

    dtype函数可以返回数组中数据类型

     

     

    >>> arr2.dtype dtype('int32')

    zeros和ones分别可以创建指定形状的全0或者全1数组,empty可以创建一个没有任何具体值的数组,传入一个元组表示多维数组范围

     

     

    >>> np.zeros((3,2)) array([[ 0., 0.], [ 0., 0.], [ 0., 0.]])>> > np.ones((4,4)) array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])>> > np.empty((2,3)) array([[ 0., 0., 0.], [ 0., 0., 0.]])>> >

    ones_like以另一个数组为参数,创建同样大小的全1数组:类似还有zeros_like,empty_like

     

     

    np.ones_like(arr2) array([[1, 1, 1, 1], [1, 1, 1, 1]])>

    eye函数创建单位矩阵

     

    arange函数类似python内置的range函数:

     

    >>> np.arange(15) array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

    三:ndarray的数据类型

     

    可以显示指定数组数据类型

     

    >>> arr1=np.array([1,2,3],dtype=np.float64) >>> arr1.dtype dtype('float64')

    可以通过ndarray的astype方法显示地转换其dtype

     

     

    >>> arr=arr1.astype(np.float32) >>> arr array([ 1., 2., 3.], dtype=float32)

    如果某字符串数组全是数字,也可以用astype将其转化为数值形式

     

     

    >>> num_strings=np.array(['1.25','-9.6','42'],dtype=np.string_) >>> num_strings.astype(float) array([ 1.25, -9.6 , 42. ])

    四:数组和标量之间的运算

     

    arr*arr,arr-arr,1/arr,arr**0.5都是可以运算的。

    五:基本的索引和切片

    一维数组的操作和Python列表的功能差不多:

     

    >>> np.arange(15) array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) >>> arr=np.arange(10) >>> arr array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> arr[5] 5 >>> arr[5:8]=12 >>> arr array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])

    跟列表最重要的区别是,数组切片是原始数组的视图,这意味着数据不会被复制,试图上的所有修改都会直接反映到原数组上。

     

    如果要得到副本,可以用copy函数

     

    >>> arr1=arr[5:8].copy() >>> arr1 array([12, 12, 12])

    切片索引也跟Python列表的一维对象差不多。

     

    可以利用整形数组进行索引:

     

    >>> arr=np.empty((8,4)) >>> for i in range(8): ... arr[i]=i .. . >>> arr array([[ 0., 0., 0., 0.], [ 1., 1., 1., 1.], [ 2., 2., 2., 2.], [ 3., 3., 3., 3.], [ 4., 4., 4., 4.], [ 5., 5., 5., 5.], [ 6., 6., 6., 6.], [ 7., 7., 7., 7.]])>> > arr[[4,3,1,0]] array([[ 4., 4., 4., 4.], [ 3., 3., 3., 3.], [ 1., 1., 1., 1.], [ 0., 0., 0., 0.]])>> >

    注意,这种方式跟切片不一样,会把数据复制到新数组之中。

     

    六:数组的转置

    转置方法.T

     

    arr=np.arange(15).reshape((3,5)) >>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])>> > arr.T array([[ 0, 5, 10], [ 1, 6, 11], [ 2, 7, 12], [ 3, 8, 13], [ 4, 9, 14]])

    计算矩阵内积XTX:

    >>> arr=np.random.randn(6,3) >>> np.dot(arr.T,arr) array([[ 11.22401502, 4.2548458 , -2.84368601], [ 4.2548458 , 9.0673642 , -4.23048071], [ -2.84368601, -4.23048071, 3.89732813]])

    七:通用函数:对数组中每一个元素执行运算。

     

    np.abs            求绝对值

    np.sqrt           求各元素平方根

    np.square     求各元素平方

    np.exp            求各元素指数

    log ,log10,log2     求对数

    ceil                 变成大于该值的最小整数

    floor               变成小于该值的最大整数

    isnan            返回一个表示哪些值是“NAN”的布尔型数组

    add                两个数组对应相加(subtract,multiply,divide)

    八:利用数组进行数据处理:

    np.where函数是三元表达式x if condition else y的矢量化版本

     

    >>> xarr=np.array([1.1,1.2,1.3,1.4,1.5]) >>> yarr=np.array([2.1,2.2,2.3,2.4,2.5]) >>> cond = np.array([True,False,True,True,False]) >>> result = np.where(cond,xarr,yarr) >>> result array([ 1.1, 2.2, 1.3, 1.4, 2.5])

    where在数据分析中经常使用,通常用于根据一个数组产生另一个数组

     

     

    >>> arr = np.random.randn(4,4) >>> arr array([[-0.88678735, 0.41149481, -0.55946983, 0.44320273], [-0.85065922, -0.89529666, -0.52700649, -0.13264943], [-0.52438978, -1.10277602, 0.56030451, 1.43615325], [-1.30382499, 0.3459263 , -1.52122709, 0.40608226]])>> > np.where(arr>0,2,arr) #只将正值设置为2 array([[-0.88678735, 2. , -0.55946983, 2. ], [-0.85065922, -0.89529666, -0.52700649, -0.13264943], [-0.52438978, -1.10277602, 2. , 2. ], [-1.30382499, 2. , -1.52122709, 2. ]])>

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-667764.html

    最新回复(0)