zoukankan      html  css  js  c++  java
  • NumPy与ndarray简介(转)

    http://blog.csdn.net/u014374284/article/details/45420645

    一、NumPy简介

    NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括:

    • 一个强大的N维数组对象ndrray;
    • 比较成熟的(广播)函数库;
    • 用于整合C/C++和Fortran代码的工具包;
    • 实用的线性代数、傅里叶变换和随机数生成函数

    NumPy的优点:

    • 对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多;
    • NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的;
    • NumPy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多

       当然,NumPy也有其不足之处,由于NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对TB级大文件的处理;此外,NumPy数组的通用性不及Python提供的list容器。因此,在科学计算之外的领域,NumPy的优势也就不那么明显。

    二、数组ndarray

    NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器,该对象由两部分组成:

    • 实际的数据;
    • 描述这些数据的元数据;

    大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据。数组的维数称为秩,简单来说就是如果你需要获取数组中一个特定元素所需的坐标数,如a是一个2×3×4的矩阵,你索引其中的一个元素必须给定三个坐标a[x,y,z],故它的维数就是3。而轴可以理解为一种对数组空间的分割,以数组a为例,如果我们以0为轴,那么a可以看成是一个由两个元素构成的数组,其中每个元素都是一个3×4的数组。

    我们可以直接将数组看作一种新的数据类型,就像list、tuple、dict一样,但数组中所有元素的类型必须是一致的,Python支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy中添加了许多其他的数据类型,如bool、inti、int64、float32、complex64等。同时,它也有许多其特有的属性和方法。

    常用ndarray属性:

    • dtype        描述数组元素的类型
    • shape       以tuple表示的数组形状
    • ndim         数组的维度
    • size           数组中元素的个数
    • itemsize    数组中的元素在内存所占字节数
    • T               数组的转置
    • flat            返回一个数组的迭代器,对flat赋值将导致整个数组的元素被覆盖
    • real/imag  给出复数数组的实部/虚部
    • nbytes      数组占用的存储空间

    常用ndarray方法

      • reshape(…)                                 返回一个给定shape的数组的副本
      • resize(…)                                    返回给定shape的数组,原数组shape发生改变
      • flatten()/ravel()                            返回展平数组,原数组不改变
      • astype(dtype)                              返回指定元素类型的数组副本
      • fill()                                              将数组元素全部设定为一个标量值
      • sum/Prod()                                  计算所有数组元素的和/积
      • mean()/var()/std()                        返回数组元素的均值/方差/标准差
      • max()/min()/ptp()/median()          返回数组元素的最大值/最小值/取值范围/中位数
      • argmax()/argmin()                       返回最大值/最小值的索引
      • sort()                                           对数组进行排序,axis指定排序的轴;kind指定排序算法,默认是快速排序
      • view()/copy()                               view创造一个新的数组对象指向同一数据;copy是深复制
      • tolist()                                          将数组完全转为列表,注意与直接使用list(array)的区别
      • compress()                                  返回满足条件的元素构成的数组
  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/quietwalk/p/8003862.html
Copyright © 2011-2022 走看看