Numpy入门——Python数据分析mooc笔记

数据

一个数据,表达一个含义
一组数据,表达一个或多个含义

列表和数组

列表:数据类型可以不同
数组:数据类型相同

Python已有列表类型,为什么需要一个数组对象(类型)?

  • 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
  • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
  • 数组对象采用相同的数据类型,有助于节省运算和存储空间

比较Python内置列表类型和数组对象类型

计算 A 2 + B 3 A^2+B^3 A2+B3,其中A和B是一维数组

  • Python内置列表类型

    def pySum():
        a = [0,1,2,3,4]
        b = [5,6,7,8,9]
        c = []
        for i in range(len(a)):
            c.append(a[i]**2+b[i]**3)
        return c
    print(pySum())
    
  • numpy数组

    import numpy as np
    def npSum():
        a = np.array([0,1,2,3,4])
        b = np.array([5,6,7,8,9])
        c = a**2 + b**3
        return c
    print(npSum())
    

N维数组对象:ndarray

np.array()生成一个ndarray数组,输出成[]形式,元素由空格分隔
轴(axis): 保存数据的维度;秩(rank):轴的数量

In [1]: import numpy as np

In [2]: a = np.array([[0,1,2,3],[4,5,6,7]])

In [3]: a
Out[3]:
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
 
In [4]: a.ndim
Out[4]: 2
 
In [5]: a.shape
Out[5]: (2, 4)
 
In [6]: a.size
Out[6]: 8
 
In [7]: a.dtype
Out[7]: dtype('int32')
 
In [8]: a.itemsize
Out[8]: 4
 
In [9]: b = np.array([[0,1,2,3,4],[5,6,7]])
# ndarray数组可以由非同质对象构成

In [10]: b
Out[10]: array([[0, 1, 2, 3, 4], [5, 6, 7]], dtype=object)
# 非同质ndarray元素为对象类型
 
In [11]: b.ndim
Out[11]: 1
 
In [12]: b.shape
Out[12]: (2,)
 
In [13]: b.size
Out[13]: 2
# 非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用

In [14]: b.dtype
Out[14]: dtype('O')
 
In [15]: b.itemsize
Out[15]: 8
属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象的尺度,对于矩阵,n行m列
.sizendarray对象元素的个数,相当于.shape中n*m的值
.dtypendarray对象的元素类型(bool,intc,intp,int8,int16,int32,int64)
.itemsizendarray对象中每个元素的大小,以字节为单位

ndarray数组的创建方法

  1. 从Python中的列表、元组等类型创建ndarray数组
    x = np.array(list/tuple, dtype=np.float32)
    当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型

  2. 使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等

    函数说明
    np.arange(n)类似range()函数,返回ndarray类型,元素从0到n‐1
    np.ones(shape)根据shape生成一个全1数组,shape是元组类型
    np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
    np.full(shape,val)根据shape生成一个数组,每个元素值都是val
    np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
    np.ones_like(a)根据数组a的形状生成一个全1数组
    np.zeros_like(a)根据数组a的形状生成一个全0数组
    np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
  3. 使用NumPy中其他函数创建ndarray数组

    函数说明
    np.linspace()根据起止数据等间距地填充数据,形成数组
    np.concatenate()将两个或多个数组合并成一个新的数组
    In [2]: a = np.linspace(1,10,4)
    
    In [3]: a
    Out[3]: array([  1.,   4.,   7.,  10.])
    
    In [4]: b = np.linspace(1,10,4,endpoint=False)
    
    In [5]: b
    Out[5]: array([ 1.  ,  3.25,  5.5 ,  7.75])
    py
    In [6]: c = np.concatenate((a,b))
    
    In [7]: c
    Out[7]: array([  1.  ,   4.  ,   7.  ,  10.  ,   1.  ,   3.25,   5.5 ,   7.75])
    

ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换

  1. 维度变换

    方法说明
    .reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
    .resize(shape)与.reshape()功能一致,但修改原数组
    .swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
    .flatten()对数组进行降维,返回折叠后的一维数组,原数组不变

    实例:

    In [8]: d = np.ones((2,3,4),dtype=np.int32)
    
    In [9]: d.reshape((3,8))
    Out[9]:
    array([[1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1]])
    
    In [10]: d
    Out[10]:
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]])
    
    In [11]: d.resize((3,8))
    
    In [12]: d
    Out[12]:
    array([[1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1]])
    
    In [13]: d.flatten()
    Out[13]:
    array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1])
    
    In [14]: d
    Out[14]:
    array([[1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1]])
    
  2. 类型变换
    new_a = a.astype(new_type)
    astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致

    In [2]: e = np.ones((2,3,4),dtype=np.int)
    
    In [3]: e
    Out[3]:
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]])
    
    In [4]: e.astype(np.float)
    Out[4]:
    array([[[ 1.,  1.,  1.,  1.],
            [ 1.,  1.,  1.,  1.],
            [ 1.,  1.,  1.,  1.]],
    
           [[ 1.,  1.,  1.,  1.],
            [ 1.,  1.,  1.,  1.],
            [ 1.,  1.,  1.,  1.]]])
    
  3. 数组向列表的转换
    ls = a.tolist()

    In [2]: a = np.full((2,3,4),25,dtype=np.int32)
    
    In [3]: a
    Out[3]:
    array([[[25, 25, 25, 25],
            [25, 25, 25, 25],
            [25, 25, 25, 25]],
    
           [[25, 25, 25, 25],
            [25, 25, 25, 25],
            [25, 25, 25, 25]]])
    
    In [4]: a.tolist()
    Out[4]:
    [[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]],
    [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
    

ndarray数组的操作

索引:获取数组中特定元素位置的过程
切片:获取数组元素子集的过程

  • 一维数组的索引和切片:与Python的列表类似
    每个维度切片方法与一维数组相同
    每个维度可以使用步长跳跃切片

    In [2]: a = np.array([9,8,7,6,5])
    
    In [3]: a[2]
    Out[3]: 7
    
    In [4]: a[1:4:2]
    Out[4]: array([8, 6])
    
  • 多维数组的切片

    In [5]: b = np.arange(24).reshape((2,3,4))
     
    In [6]: b
    Out[6]:
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
     
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
     
    In [7]: b[1,2,3]
    Out[7]: 23
     
    In [8]: b[-1,-2,-3]
    Out[8]: 17
    

ndarray数组的运算

  • 数组与标量之间的运算作用于数组的每一个元素

  • NumPy一元函数
    对ndarray中的数据执行元素级运算的函数

    函数说明
    np.abs(x)np.fabs(x)计算数组各元素的绝对值
    np.sqrt(x)计算数组各元素的平方根
    np.square(x)计算数组各元素的平方
    np.log(x)np.log10(x)np.log2(x)计算数组各元素的自然对数、10底对数和2底对数
    np.ceil(x)np.floor(x)计算数组各元素的ceiling值 或 floor值
    np.rint(x)计算数组各元素的四舍五入值
    np.modf(x)将数组各元素的小数和整数部分以两个独立数组形式返回
    np.cos(x)np.cosh(x)
    np.sin(x)np.sinh(x)
    np.tan(x)np.tanh(x)
    计算数组各元素的普通型和双曲型三角函数
    np.exp(x)计算数组各元素的指数值
    np.sign(x)计算数组各元素的符号值,1(+), 0, ‐1(‐)
  • NumPy二元函数

    函数说明
    +*/**两个数组各元素进行对应运算
    np.maximum(x,y)np.fmax()
    np.minimum(x,y)np.fmin()
    元素级的最大值/最小值计算
    np.mod(x,y)元素级的模运算
    np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素
    ><>=<===!=算术比较,产生布尔型数组
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值