博客
关于我
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/

    你可能感兴趣的文章
    Nacos服务注册总流程(源码分析)
    查看>>
    nacos服务注册流程
    查看>>
    Nacos服务部署安装
    查看>>
    nacos本地可以,上服务器报错
    查看>>
    Nacos注册Dubbo(2.7.x)以及namespace配置
    查看>>
    Nacos注册中心有几种调用方式?
    查看>>
    nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
    查看>>
    nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
    查看>>
    nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)
    查看>>
    nacos源码 nacos注册中心1.4.x 源码 如何注册服务 发送请求,nacos clinet客户端心跳 nacos 注册中心客户端如何发送的心跳 (三)
    查看>>
    Nacos源码分析:心跳机制、健康检查、服务发现、AP集群
    查看>>
    nacos看这一篇文章就够了
    查看>>
    Nacos简介、下载与配置持久化到Mysql
    查看>>
    Nacos简介和控制台服务安装
    查看>>
    Nacos管理界面详细介绍
    查看>>
    Nacos编译报错NacosException: endpoint is blank
    查看>>
    nacos自动刷新配置
    查看>>
    nacos运行报错问题之一
    查看>>
    Nacos部署中的一些常见问题汇总
    查看>>
    NACOS部署,微服务框架之NACOS-单机、集群方式部署
    查看>>