目录

学习目标

1 Numpy介绍

2 ndarray介绍

3 ndarray与Python原生list运算效率对比

4 ndarray的优势(了解)

4.1 内存块风格

4.2 ndarray支持并行化运算(向量化运算)

4.3 效率远高于纯Python代码

5 小结


学习目标

目标:
了解Numpy运算速度上的优势
知道Numpy的数组内存块风格
知道Numpy的并行化运算

1 Numpy介绍


Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

2 ndarray介绍

NumPy provides an N-dimensional array type, the ndarray,
which describes a collection of “items” of the same type.

NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。

用ndarray进行存储:

import numpy as np# 创建ndarrayscore = np.array(
[[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
score

返回结果:

array([[80, 89, 86, 67, 79],[78, 97, 89, 67, 81],[90, 94, 78, 67, 74],[91, 91, 90, 67, 69],[76, 87, 75, 67, 86],[70, 79, 84, 67, 84],[94, 92, 93, 67, 64],[86, 85, 83, 67, 80]])

提问:
使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组,那么为什么还需要使用
Numpy的ndarray呢?

3 ndarray与Python原生list运算效率对比

在这里我们通过一段代码运行来体会到ndarray的好处

import random
import time
import numpy as np
a = []
for i in range(100000000):a.append(random.random())# 通过%time魔法方法, 查看当前行的代码运行一次所花费的时间
%time sum1=sum(a)
b=np.array(a)
%time sum2=np.sum(b)

其中第一个时间显示的是使用原生Python计算时间,第二个内容是使用numpy计算时间:

CPU times: user 852 ms, sys: 262 ms, total: 1.11 s
Wall time: 1.13 s
CPU times: user 133 ms, sys: 653 μs, total: 133 ms
Wall time: 134 ms

从中我们看到ndarray的计算速度要快很多,节约了时间。
机器学习的最大特点就是大量的数据运算,那么如果没有一个快速的解决方案,那可能现在python也在机器学习领域达不到好的效果。

Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。
思考:
ndarray为什么可以这么快?

4 ndarray的优势(了解)

4.1 内存块风格

ndarray到底跟原生python列表有什么不同呢,请看一张图: 

从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。
        这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

4.2 ndarray支持并行化运算(向量化运算)

numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算

4.3 效率远高于纯Python代码

Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。

5 小结

numpy介绍【了解】
        一个开源的Python科学计算库
        计算起来要比python简洁高效
        Numpy使用ndarray对象来处理多维数组
ndarray介绍【了解】
        NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。
        生成numpy对象:np.array()
ndarray的优势【掌握】
        内存块风格
        list -- 分离式存储,存储内容多样化
        ndarray -- 一体式存储,存储类型必须一样
        ndarray支持并行化运算(向量化运算)
        ndarray底层是用C语言写的,效率更高,释放了GIL

Numpy学习(1)-Numpy的优势相关推荐

  1. python中ndarray对象实例化_Python数据分析之Numpy学习 2——NumPy 基础 ndarray对象

    Python数据分析之Numpy学习 2 -- NumPy 基础学习 NumPy(Numerical Python)是高性能科学计算和数据分析的基础包.NumPy的主要对象是同构数据多维容器(homo ...

  2. Numpy学习之——numpy.mean中axis参数用法

    参考:https://blog.csdn.net/m0_37561765/article/details/78187700 首先官网里有写:  numpy.mean(a, axis=None, dty ...

  3. Numpy学习笔记(下篇)

    目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...

  4. python hstack_Python学习之Numpy速成记——基础篇(中)

    上节课我们一起学习了Numpy的基本功能和它的部分基础知识.今天我们一起接着来学习剩下的部分. 5.一维数组的索引和切片 (1)一维数组的切片操作与Python列表的切片操作很相似.例如,我们可以用下 ...

  5. numpy 学习笔记

    numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...

  6. 学习笔记——Numpy基本操作(一)

    为了方便学习,我把本文介绍的一些函数先列举下 数组属性 ndarray.ndim ndarray.shape 创建数组 numpy.empty.numpy.zeros.numpy.ones初始化 数值 ...

  7. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  8. numpy学习4:NumPy基本操作

    一.数组与标量.数组之间的运算 数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法. 矢量化数组运算性能比纯Python方式快上一两个数据级. 大小相等 ...

  9. numpy学习2:数组创建方式

    一.前言 Numerical Python,即数值Python包,是Python进行科学计算的一个基础包,所以是一个掌握其他Scipy库中模块的基础模块,一定需要先掌握该包的主要使用方式. 官网:ht ...

  10. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

最新文章

  1. 干货 | 国家信息中心杜平谈关于数字化的几点思考
  2. Ubuntu系统下移动宽带自动启用设置
  3. Propel项目改为基于TensorFlow.js
  4. 如何在Unity中添加三维空间声音Spatial Sounds
  5. java 点与线的距离_计算地图上点与线段距离
  6. Java开发面试题,Java常用类使用总结
  7. 代码生成工具CodeSmith中SchemaExplorer类API文档[转]
  8. 关于TransactionScope分布式事务在Oracle下的运作
  9. CF 1025C Plasticine zebra
  10. CVPR2020 | 谷歌提出多目标(车辆)跟踪与检测框架 RetinaTrack
  11. Python稳基修炼的经典案例6(计算机二级、初学者必须掌握的例题)
  12. 理解委托的两类必要方法
  13. 计算机无法安装VC2015,win10 vc++2015一个或多个问题导致了安装失败如何处理
  14. plot、plot,semilogx(x,y),semilogy(x,y),loglog(x,y), bar(x):hist(x): fplot
  15. centos oracle libaio哪下载,在CentOS4.5上安装Oracle10g出现的libaio-0.3.96; found Not found问题求救...
  16. Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例
  17. 基于NRF24L01的CAN数据透传
  18. 商业虚拟专用网络技术十四 BGP/MPLS技术扩展
  19. SecureBoost: A Lossless Federated Learning Framework论文笔记
  20. 水文预报中的确定性系数如何计算确定

热门文章

  1. Map里的常见方法及遍历
  2. 惹毛程序员的十件事!需求变更居然不是排第一
  3. [Python Challenge通关]第5关 peak hell
  4. 读高利曼昆的经济学原理(二)
  5. LeetCode 整数转罗马数字
  6. 介绍一个很好的网站店铺推广优惠券插件 - URL Coupons
  7. Android 自定义 View:包含多种状态的下载用圆形进度条
  8. 手机信令数据怎么获得_聚焦手机信令数据支持城镇体系规划的技术框架
  9. 安卓音乐播放器中歌词同步问题
  10. 与不同类型的人交往,如何处理同事关系