博客
关于我
numopy学习笔记
阅读量:768 次
发布时间:2019-03-23

本文共 2567 字,大约阅读时间需要 8 分钟。

numpy 作为一个强大的 Python 库,提供了丰富的功能来处理数组数据。本文将从基础知识出发,逐步介绍 numpy 的核心功能。

numpy 数组的基本属性

在使用 numpy 时,最基本的属性有以下几个:

  • shape:表示数组的维度,这是一个元组,每个元素表示对应维度的大小。
  • ndim:表示数组的维度数,默认为 1 表示一维数组。
  • size:表示数组中元素的总数。
  • itemsiz:返回数组中元素的大小(以字节为单位)。
  • dtype:返回数组元素的类型信息。

以下是一个常用的创建指定类型数组的示例:

np.array([1.1, 2.2, 3.3], dtype='float32')

其中,dtype='float32' 参数指定了数组元素的类型,生成的是浮点型数组。

生成数组

生成数组的功能有以下几种常用方法:

  • 生成 0 和 1 的数组

    • 使用 np.zeros 创建全 0 的数组,指定形状和数据类型:
    np.zeros(shape=[3, 4], dtype="float")
    • 使用 np.ones 创建全 1 的数组:
    np.ones(shape=[2, 2])
  • 从现有数组中生成

    • 浅拷贝:使用 np.asarray
    a = np.array([1, 2, 3])b = np.asarray(a)
    • 深拷贝:使用 np.copynp.array(...)
    c = np.copy(a)  # 深拷贝d = np.array(a.copy())  # 深拷贝
  • 固定范围生成数组:使用 np.linspace 生成等距固定范围的数组:

    np.linspace(0, 10, 100)

    这将生成 [0, 10] 范围内的 100 个等分点。

  • 统计函数

    生成数据时经常会需要一些统计函数来分析数据:

    • 均匀分布随机数

      np.random.rand(d0, d1, ...)  # [0, 1) 范围np.random.uniform(0.0, 1.0, size=(3, 4))# 生成指定大小的均匀分布随机数
    • 高斯分布随机数

      np.random.normal(0, 1)  # 标准正态分布np.random.normal(5, 2)  # 均值为 5,标准差为 2

    数组操作

    numpy 提供丰富的数组操作功能,包括索引切割、形状修改和类型转换等。

  • 数组索引切片

    arr = np.arange(10)print(arr)  # 输出 [0, 1, 2, ..., 9]print(arr[::2])  # 步长为 2 切成 [0, 2, 4, 6, 8]
  • 形状修改

    • 转置:使用 np.T 切换行和列:
    arr = np.arange(4).reshape(2, 2)print(arr.T)# 输出:# [[0, 1],#  [2, 3]]
    • 调整大小:使用 np.reshape
    new_arr = np.reshape(arr, (1, -1))print(new_arr)
    • 调整大小并反转:可以通过结合切片和 reshape 实现。
  • 类型转换:使用 np.astype 方法转换数组元素类型:

    float_arr = np.array([1, 2, 3], dtype=np.float64)int_arr = float_arr.astype('int32')
  • 数组增强功能

    numpy 还提供了一些实用功能来操作数组:

    • 去重:使用 np.unique 方法:
      unique_arr = np.unique([1, 2, 2, 3, 3, 3], return_indices=False)print(unique_arr)# 输出:[1, 2, 3]

    数组运算

    数组之间的运算通常涉及到以下操作:

  • 逻辑运算和布尔索引

    condition = np.where(condition_matrix, True_values, False_values)
  • 统计指标计算:使用 np.max, np.min, np.mean 等函数来计算数据特征。例如:

    data = np.array([4, 5, 6, 7, 8])print(np.mean(data))  # 6.0print(np.max(data))  # 8
  • 数组间操作

    当需要对两个数组进行操作时,numpy 会利用数组的广播机制来处理形状不一致的问题。具体来说,当两个数组在某个维度的某个位置上为 1 时,会自动扩展到相同的大小进行操作。

    例如,按钮创建两个不同形状的数组并进行加法操作:

    a = np.array([...], shape=(2, 3))b = np.array([...], shape=(3, 2))a + b# 会自动广播到 (2, 2) 维度上进行加法

    矩阵运算

    如果需要执行矩阵乘法,可以使用以下两种方式:

  • 通过 NumPy 的矩阵表示:

    data_arry @ weights  # 如果是 2D 矩阵np.matmul(data_arry, weights_arry)
  • 通过 Python 的 @ 操作符(推荐使用)。

  • 合并与分割

    合并数据可以使用以下函数:

    • 水平拼接:使用 np.hstack

      a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])b = np.hsplit(b, [1, 2])result = np.hstack((a, b))
    • 竖直拼接:使用 np.vstack

      chunks = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])stacked = np.vstack(chunks)

    IO 操作

    与文件操作相关的常用函数包括:

    • 读取文本文件:使用 np.genfromtxt

      data = np.genfromtxt('sample.csv', delimiter=',')
    • 处理缺失值:常见的处理方法是删除包含缺失值的行,或者用统计方法进行插值填补。

    总结

    通过以上基本功能和代码示例,可以逐步掌握 numpy 的核心工作流程。

    转载地址:http://psnzk.baihongyu.com/

    你可能感兴趣的文章
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySql 创建函数 Error Code : 1418
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    MySQL 到底能不能放到 Docker 里跑?
    查看>>
    mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
    查看>>
    MySQL 加锁处理分析
    查看>>
    mysql 协议的退出命令包及解析
    查看>>
    mysql 参数 innodb_flush_log_at_trx_commit
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    MySQL 命令和内置函数
    查看>>
    MySQL 和 PostgreSQL,我到底选择哪个?
    查看>>
    mysql 四种存储引擎
    查看>>