Intro

对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点:

  • 代码更简洁: numpy直接以数组、矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层实现;
  • 性能更高效: numpy的数组存储效率和输入输出计算性能,比python使用list好很多,用numpy进行计算要比原生Python快得多,而且数据量越大,效果越明显;numpy的大部分代码都是c语言实现的,这是numpy比python高效的原因

numpy核心:ndarray对象

ndarray对象

  • numpy的核心数据结构,叫做array就是数组,array对象可以是一维数组,也可以是多维数组
  • python的list也可以实现相同的功能,但是array的优势在于性能好,包含数组元数据信息、大量的便捷函数
  • 成为 Scipy、Pandas、scilit-learn、tensorflow、paddlepaddle等框架的通用底层语言
  • numpy的array和python的list的一个区别是它的元素必须都是同一种数据类型,这也是numpy高性能的一个原因

ndarray属性

个人以前会弄混shape和size,注意shape打印的是数组的形状是一个元组,size则是表示数组大小即总共有多少个元素

  • shape 返回一个元组 表示array的形状
  • ndim 返回一个数字 表示array的维度的数目
  • size 返回一个数字 表示array中所有数据元素的数目
  • dtype array中元素的数据类型,a.astype(str) 可以把a数组元素转为str类型
  • itemsize 表示数组中每个元素的字节大小

创建array的方法

  • 从Python的列表list和嵌套列表创建array,np.array([...])
  • 使用函数arange、linspace等创建等差数组,np.arange(start,stop,step,dtype) 左闭右开,np.linspace(start,stop,num,endpoint) 默认左右取闭,num是要删除的等间隔样例数量(默认50),endpoint 序列中是否包含stop值, 默认为true
  • 使用ones、ones_like、zeros、zeros_like、empty、empty_like、full、full_like、eye等函数创建,注意使用empty创建的数据是未初始化的,里面的值可能是随机值不要用,full则是将一个给定大小的数组填满固定值,用法如np.full((2, 4), 666)
  • 生成随机数的np.random模块创建,np.random.seed(2022) 设置随机种子,使得每次随机的结果固定,np.random.rand(2,5) 随机生成 2行5列的2维数组,返回数据在[0,1)之间;np.random.randint(2,5,5) 在[2,5) 范围内生成5个随机整数;np.random.uniform(2,5,10) 在 [2,5) 之间 生成均匀分布的10个数字;np.random.uniform(2,5,(2,5)) 在 [2,5) 之间 生成均匀分布的(2,5)个数字; np.random.randn((2,5)) 则返回有标准正态分布的数据,均值1方差0;np.random.normal(1,10,(2,5)) 则可指定均值和标准差;另外,choice 从给定的数组里 生成随机结果,shuffle 把一个数组进行随机排列(如果数组是多维的 则只会在第一维度打散数据),permutation 把一个数组进行随机排列 ,或者数字的全排列,两者功能相同但permutation不会更改原来的arr 会返回一个新的copy

numpy的数组索引

三种索引方法:

  • 基础索引,切片法,不详细叙述
  • 神奇索引,就是用整数数组进行的索引,比如对于x = np.arange(10),可以用x[np.array([[0,2],[1,3]])]来取x对应位置的值;对于二维数组,Y[:,[0, 2]] 筛选第0和第2列,Y[[0,2,3],[1,2,3]]同时指定行列
  • 布尔索引,对于x = np.arange(10),可以用x>5返回bool值的数组,x[x>5] = 1通过条件进行赋值,把x中大于5的值全部赋为1,x[x<5] += 20,小于5的值全部加20,还可以进行条件组合,比如x[(x%2==0)| (x>7)]x[(x%2==0)& (x>7)];注意对于二维数组Y = np.arange(20).reshape(4, 5) 来说,既有行又有列 因此返回的是 行列一维数组Y[Y>5] 返回的是行列一维数组,可以用Y[:, 3][Y[:, 3]>5] 把第3列大于5的行数据筛选出来

numpy数据操作

数组数学操作

A*B是对应位置元素相乘,对于arr = np.arange(12).reshape(3,4),可以用各种数学统计函数,包括sum,prod(元素乘积),cumsum(np.cumsum(arr)从头到尾累加,每加一次输出一个元素),cumprod(累积),min,max,median,mean,np.percentile(arr,[25,50,75])np.quantile(arr,[0.25,0.5,0.75])求取数列第?分位的数值(后者范围为0-1),std(标准差)

,var(方差),np.average(arr, weights=np.random.rand(*arr.shape)) 加权平均,argmax 寻找最大值的下标

  • 对于numpy的聚合类函数的axis参数解释:axis=0代表行 axis=1 代表列,axis=0 代表把行消解掉,axis=1 代表把列消解掉;axis=0 代表跨行计算, axis=1 代表跨列计算

数组合并操作

对于a = np.arange(9).reshape(3,3)以及b = np.arange(9,18).reshape(3,3),合并行(行变多)使用np.concatenate([a,b])np.vstack([a,b])np.row_stack([a,b]) ,合并列(列变多)使用np.concatenate([a,b],axis=1)np.hstack([a,b])np.column_stack([a,b])

参考

[1-5 Numpy教程 — 梗直哥随笔 v0.1 文档 (gengzhige-essay.readthedocs.io)](https://gengzhige-essay.readthedocs.io/docs/01 环境配置/1-5 Numpy教程.html)

科学计算库Numpy - mathor (wmathor.com)

科学计算库Numpy基础&提升(理解+重要函数讲解)的更多相关文章

  1. Python科学计算库Numpy

    Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...

  2. numpy科学计算库的基础用法,完美抽象多维数组(原创)

    #起别名避免重名 import numpy as np #小技巧:print从外往内看==shape从左往右看 if __name__ == "__main__": print(' ...

  3. python科学计算库numpy和绘图库PIL的结合,素描图片(原创)

    # 导入绘图库 from PIL import Image #导入科学计算库 import numpy as np #封装一个图像处理工具类 class TestNumpy(object): def ...

  4. Python 科学计算库numpy

    Numpy基础数据结构 NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数 # 多维数组ndarray import numpy as np ar ...

  5. [Python学习] python 科学计算库NumPy—矩阵运算

    NumPy库的核心是矩阵及其运算. 使用array()函数可以将python的array_like数据转变成数组形式,使用matrix()函数转变成矩阵形式. 基于习惯,在实际使用中较常用array而 ...

  6. Python科学计算库-Numpy

    NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...

  7. [Python学习] python 科学计算库NumPy—tile函数

    在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法.   函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是ar ...

  8. 科学计算库Numpy(1)

    Numpy 一,数据结构 数据类型: ndarray import numpy world_alchol = numpy.genfromtxt('world_alchol.txt',delimiter ...

  9. 科学计算库Numpy——概述

    Numpy主要用于数组的各种计算. 导入Numpy import numpy as np 数组类型 Numpy的数组类型为numpy.ndarray. array=np.array([1,2,3,4, ...

随机推荐

  1. mysql内连接查询之自连接

    连接查询: 当查询数据时,通过连接操作查询出存放在多个表中的不同数据,当两个或者多个表中存在相同意义的字段时, 便可以通过这些字段对不同的表进行连接查询. 自连接: 如果在一个连接查询中,涉及的两个表 ...

  2. Hadoop(四)C#操作Hbase

    Hbase Hbase是一种NoSql模式的数据库,采用了列式存储.而采用了列存储天然具备以下优势: 可只查涉及的列,且列可作为索引,相对高效 针对某一列的聚合及其方便 同一列的数据类型一致,方便压缩 ...

  3. 常问的MySQL面试题集合

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 除了基础题部分,本文还收集整理的MySQL面试题还包括如下知识点或题型: MySQL高性能索引 ...

  4. 《Mybatis 手撸专栏》第7章:SQL执行器的定义和实现

    作者:小傅哥 博客:https://bugstack.cn - <手写Mybatis系列> 一.前言 为什么,要读框架源码? 因为手里的业务工程代码太拉胯了!通常作为业务研发,所开发出来的 ...

  5. Linux 常见必备

    一.学习Linux须知常识 1.Linux 是什么? Linux 是一个操作系统. 我们的 Linux 主要是系统调用和内核那两层. 当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比 ...

  6. CTFHub-HTTP协议五关刷题解答

    CTFHub 开箱即用的CTF学习解决方案 地址:https://www.ctfhub.com/#/skilltree 本次解答一共包括五关,没有先后顺序. 1.技能树一:请求方式 题目描述 打开后得 ...

  7. SpringMVC乱码解决

    解决需要四个步骤:1.jsp页面编码   2.tomcat server.xml编码  3.使用filter对编码进行过滤  4.数据库编码设置 说明:四个地方的编码需要一致:本文使用gbk 1.js ...

  8. 105_Power Pivot财务科目(层级深度&筛选深度)

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 在财务科目中,需要按照科目层级来显示:在excel中都是用公式来实现,而且对于数据的管理及更新是一件头痛的事情, ...

  9. Nexus5x 修改Android开机动画

    1.制作帧动画 这里随便从网上找了一个gif图片,导入PS中,打开后会形成很多帧图层,选择导航栏中的文件->脚本->将图层导出到文件可以将所有图层导出来.要注意文件命名,Android会按 ...

  10. Vue基础篇 之 v-model 模拟

    我们知道vue中 为简化表单输入 提供了v-model 的语法绑定 将 vue的属性和表单元素进行了双向绑定 大大简化了表单数据操作的数据绑定 那么v-model 是如何实现双向绑定的呢? 今天我们来 ...