数据分析强大助力之Numpy库

​ NumPy(Numerical Python)是Python数据分析必不可少的第三方库,它一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。而且本身是由C语言开发,是个很基础的扩展,NumPy被作为Python其它科学计算包的基础包,因此理解np的数据类型对python数据分析十分重要。

​ NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。NumPy中的ndarray多维数组,具有矢量运算能力,快速、节省空间;其矩阵运算,无需循环,可完成类似Matlab中的矢量运算;而且它可以用于读写磁盘数据以及用于操作内存映射文件。

1. Numpy_介绍及属性
  • 概述

    1. Numerical Python是Python数据分析必不可少的第三方库
    2. NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型.
       使其具备了构造复杂数据类型的能力。
    3. 本身是由C语言开发,是个很基础的扩展,NumPy被Python其它科学计算包作为基础包,
       因此理解np的数据类型对python数据分析十分重要。
    4. NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,
       比Python自身的嵌套列表结构要高效的多.
    
  • 功能

    1. 高性能科学计算和数据分析的基础包
    2. ndarray,多维数组,具有矢量运算能力,快速、节省空间
    3. 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
    4. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
    
  • 属性

    NumPy的数组类被称作ndarray,通常被称作数组。
    ndarray对象属性有:
        ndarray.ndim   # 数组轴的个数, 几维数组, 轴就是几
        ndarray.shape  # 数组的维度, 例如一个n排m列的矩阵,它的shape属性将是(2,3)
        ndarray.size   # 数组中元素的总个数 
        ndarray.dtype  # 数组中元素的类型
        ndarray.itemsize  # 数组每个元素的字节大小
    
    示例代码:
    import numpy as np
    # arange(15): 生成0 ~ 15, 包左不包右之间的随机数.
    # reshape(3, 5): 把数据转成二维数组形式, 共有3个元素(一维数组), 每个一维数组的元素个数为: 5
    a = np.arange(15).reshape(3, 5)
    print(a)
    
    print('数组的维度: ', a.shape)
    print('数组的轴: ', a.ndim)
    print('数组的长度为: ', a.size)
    print('数组的每个元素的数据类型为: ', a.dtype)
    print('数组每个元素的长度为: ', a.itemsize)   # 4
    print(type(a))  # <class 'numpy.ndarray'>
    
2.Numpy_创建一维数组
  • 注意
    1. NumPy数组是一个多维的数组对象(矩阵),称为ndarray.
    2. ndarray的下标从0开始.
    3. 具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。
2.1 创建ndarray数组(一维数组)
  • 方式1: array()函数

    # 方式1: np.array()函数, 把传入的内容, 转成ndarray对象
    a = np.array([1, 2, 3])
    print(a)
    print(type(a))	# <class 'numpy.ndarray'>
    
  • 方式2: zeros(), ones()函数

    # zeros(): 创建全是0的数组.
    # ones(): 创建全是1的数组
    b = zeros((2, 3))
    print(b)		# <class 'numpy.ndarray'>  [[0. 0. 0.] [0. 0. 0.]]
    print(type(b))	# <class 'numpy.ndarray'>  [[1. 1. 1.] [1. 1. 1.]]
    
    c = ones((2, 3))
    print(c)
    print(type(c))
    
  • 方式3: arange()函数

    # 起始值为10, 结束值为20, 步长为3, 指定数据类型为: 
    d = np.arange(10, 20, 2, dtype=int)int32
    print(d)
    print(type(d))
    print(d.dtype)
    
2.2 创建随机数矩阵
# 如下涉及到范围了, 都是包左不包右. 
arr1 = np.random.rand(3, 4) # 3行4列, 0.0 ~ 1.0之间的小数
print(arr1)
print(type(arr1))

arr2 = np.random.randint(1, 5, size=(3, 4)) # 3行4列, 1 ~ 5之间的整数
print(arr2)
print(type(arr2))

arr3 = np.random.uniform(1, 5, size=(3, 4)) # 3行4列, 在均匀分布区间1~5中生成随机数
print(arr3)
print(type(arr3))
2.3 创建二维数组
  • 方式: matrix()函数, 创建二维数组

    m1 = np.mat('1 2; 3 4')
    print(m1)
    print(type(m1))	# <class 'numpy.matrix'>  martix表示二维数组, 它是ndarray的子类.
             
    m2 = np.matrix('1,2;3,4')
    print(m2)
    print(type(m2))
    
    m3 = np.matrix([[1, 2, 3], [4, 5, 6]])
    print(m3)
    print(type(m3))
    
2.4 创建等比数组
# 参1: 开始点, 参2: 结束点, 参3: 元素个数.  其中参1和参2都是10的幂
a = np.logspace(1, 3, 5)   # 即: 10 ~ 1000之间的等比数列, 取5个数字
print(a)
print(type(a))

# base表示基数改为3, 即, 这里是: 3 ~ 9之间, 等比数列, 取5个数
# endpoint属性, True(包括最后的数字, 即: 9), False(不包括最后的数字)
b = np.logspace(1, 2, 5, base=3, endpoint=True)
print(b)
print(type(b))
2.5 创建等差数列
# 1 ~ 5之间的等差数列, endpoint=False, 不包括右边的值(5), 即: 包左不包右.
c = np.linspace(1, 5, 3, endpoint=False)
print(c)
print(type(c))
3. Numpy的数据类型转换
  • dtype属性: 指定数组的数据类型,类型名+位数,如float64, int32

  • astype()函数: 转换数组的数据类型

    arr_float = np.array([1.1, 2.2, 3.3], dtype=np.float32)
    print(arr_float)
    print(arr_float.dtype)    # 元素类型为: float32
    
    # 把元素转成int类型
    arr_int = arr_float.astype(np.int32)
    print(arr_int)
    print(arr_int.dtype)
    
4.Numpy内置函数
  • 基本函数

    # 函数介绍如下: 
    np.ceil(): 向上最接近的整数,参数是 number 或 array
    np.floor(): 向下最接近的整数,参数是 number 或 array
    np.rint(): 四舍五入,参数是 number 或 array
    np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
    np.multiply(): 元素相乘,参数是 number 或 array
    np.divide(): 元素相除,参数是 number 或 array
    np.abs():元素的绝对值,参数是 number 或 array
    np.where(condition, x, y): 三元运算符,x if condition else y
    
    # 示例代码如下
    arr = np.array([1.1, -2.5, 3.6])
    print(np.ceil(arr))
    print(np.floor(arr))
    print(np.rint(arr))
    print(np.isnan(arr))
    print(np.abs(arr))
    print(np.multiply(arr, arr))
    print(np.divide(arr, arr))
    print(np.where(arr > 0, 1, 0))
    
  • 统计函数

    # 函数介绍如下: 
    np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
    np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
    np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
    np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
    np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array
      多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。
    
    
    # 示例代码如下
    # 把1 ~ 10的数字, 存入到2行5列的 二维数组中.
    arr = np.arange(1, 11).reshape(2, 5)
    print(arr)
    print(np.cumsum(arr))   # [ 1  3  6 10 15]
    print(np.sum(arr))      # 15
    print(np.sum(arr, axis=0))  # 0表示列
    print(np.sum(arr, axis=1))  # 1表示行
    
  • 比较函数

    arr = np.array([-1, 2, 3])
    print(arr)
    print(np.any(arr > 0))  # 任意1个大于零, True
    print(np.all(arr > 0))  # 所有的值都要大于零, False
    
  • 去重函数

    arr = np.array([[1, 2, 3], [2, 3, 4]])
    print(arr)
    print(np.unique(arr))
    
  • 排序函数

    arr = np.array([1, 3, 2, 5])
    print(arr)
    
    # 方式1: 排序后返回的是新的数组
    new_arr = np.sort(arr)
    print(arr)      # [1 3 2 5]
    print(new_arr)  # [1 2 3 5]
    
    # 方式2: ndarray直接调用sort, 在原数据上直接修改.
    arr.sort()
    print(arr)  # [1 2 3 5]
    
5.Numpy的运算
  • 基本运算

    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])
    c = b - a
    print(c)	    # [3 3 3]
    print(type(c))	# <class 'numpy.ndarray'>
    
  • 矩阵运算

    # 按列相乘,元素运算或矩阵x乘运算
    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([[1, 2, 3], [4, 5, 6]])
    print(a)
    print(b)
    a * b   # 默认: 按列相乘.
    np.multiply(a, b)   # 按列相乘, 效果同上. 
    
    # 普通矩阵运算, 数组1的行数 是 数组2的列数,也称为矩阵·乘运算
    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([[1, 2], [3, 4], [5, 6]])
    print(a)
    print(b)
    print(a.dot(b))     # [[22 28] [49 64]]
    print(np.dot(a, b)) # [[22 28] [49 64]]
    
  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值