https://www.toutiao.com/a6675926132304380430/

Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算。Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional array object)和ufunc(universal function object)。Ndarray(下文统一称为数组)是存储单一数据类型的多维数组(同C语言数组直接保存数值),而ufunc则是能够对数组进行处理的函数。

Numpy和pandas有什么关系呢,numpy是做数据计算,pandas是做数据处理,pandas是在numpy的基础上,处理的类似excel和数据库的记录,比如多了index和column。

那么我们为什么要学习numpy呢,通常情况下我们获取数据的方式不同,得到的数据的各式就会多种多样,比如:文档集合、图像集合、声音片段集合等等。虽然这些数据存在明显的异构性,但将他们都处理或者看做为数字数组时,就会更易于理解和处理。举个例子:

声音片段:可以看作为时间和强度的一位数组

图像集合:可以看做存储不同区域像素值的二维数组

文本:可以通过各种方式处理成数值数组形式的可分析数据。

因此,学会高效的存储和操作数组是我们进行数据科学学习的绝对基础过程。虽然在某种程度上,Numpy数组与python内置的列表类型十分相似。但是随着数组在维度上不断变大,Numpy数组供了更强大的、更高效的存储和数值操作。Numpy几乎是整个python数据科学工具生态系统的核心。因此,不管我们对数据科学的哪个方面感兴趣,多花点时间去学习高效实用Numpy,都是很值得且必要的。

  1. Numpy是什么

概念:简单来说,numpy是python的一个科学计算包,包含了多维数组以及多位数组的操作。

核心:numpy的核心是ndarray对象,这个对象封装了同质数据类型的n维数组

  • ndarray与python中原生的array有什么区别:NumPy 数组在创建时有固定的大小,不同于Python列表(可以动态增长)。更改ndarray的大小将创建一个新的数组并删除原始数据。NumPy 数组中的元素都需要具有相同的数据类型,因此在存储器中将具有相同的大小。数组的元素如果也是数组(可以是 Python 的原生 array,也可以是 ndarray)的情况下,则构成了多维数组。NumPy 数组便于对大量数据进行高级数学和其他类型的操作。通常,这样的操作比使用Python的内置序列可能更有效和更少的代码执行。越来越多的用python做数据科学和数学相关的工作者都开始使用NumPy的ndarray数组代替python原生的array数组,所以学会 Numpy 的使用是必要的 。

2、查看python中numpy的功能与内容

首先导入numpy

查看numpy的帮助文档

也可以通过两个??查看更详细的帮助文档

二、python原生数组与numpy数组的区别与联系

1、对比Python数据类型和numpy数组做元素计算对比

如果想要将一个2-D数组 a 的每个元素与长度相同的另外一个数组 b 中相应位置的元素相乘,使用 Python 原生的数组实现如下:

需要使用列表流程:

  • 初始化一个列表将需要迭代的元素放在一个可迭代对象中在用遍历的方式进行运行输入运行结果

但是如果使用numpy实现的话,可以直接使用矢量化功能:

首先将导入numpy模块

将原生数组转化为ndarray数组

然后就可以直接进行运算了

矢量化代码有很多优点,其中包括:

  • 矢量化代码更简洁易读更少的代码行通常意味着更少的错误该代码更接近地类似于标准数学符号(使得更容易,通常,以正确地编码数学构造)矢量化导致更多的“Pythonic”代码。如果没有向量化,我们的代码将会效率很低,难以读取for循环。

要实现高效的数据驱动科学和计算,需要理解数据是如何被存储和操作的。接下来的内容,我们会对比python语言处理数组的过程,找出numpy的改进之处,这将是我们理解numpy的基础。

python用户往往是被其易用性所吸引,其中一个易用指出就在于动态输入。不同于C语言和Java,python在引用和定义变量之前不用提前指定变量类型。python变量的类型来源于我们所赋的值的类型。我们可以这样去理解:

在C语言中和python中,变量的存储形式如下:

直观来说,就相当于pythpn存储数据的时候,需要耗费一定的内存去存储和数据相关的信息。而这些信息是C语言的写成的,而当我们去修改变量的值时,相当于重新创建了一个变量,会在自动跑一遍C的底层代码,将数据所有信息更新,而这些底层代码很复杂,不需要我们去写,而是在python设计之初就已经全部写好,我们只要去执行变量赋值的操作就ok。这也是python好用的点之一。

那我们现在就可以看看变量赋值这个python功能背后的高效C语言的的伪代码:

  • 一个引用计数,帮助python默默分配和处理内存以及分配和回收。将变量的类型编码(type)指定接下来的数据成员大小(len)实际的整型值

而上述说到的除了值的额外信息,都存储在我们上述图片的PyObject_HEAD中。

2、列表和数组的区别于联系

列表和数组都是用来存储一些列的元素的,不同点在于,数组这个容器要求当中的元素必须保持同一数据类型,且是数字,而列表就不一样了,可以容纳多种不同的数据类型。

但我们在开篇有说到,当我们将数据处理成数值时,方便计算和其他操作。这个时候,我们需要的容器只要可以存储数值就可以,使用列表则或耗费一定的空间去存储每一个元素的“其他信息”,但当所有的元素都是数值时,这种存储方式显然不够高效。

下面我们举个例子说明:

从代码结果可以看出,列表中每一个元素的类型都是不同的,所以列表需要耗费一定的空间去存储这些信息,当数据很大的时候这种方式显然会拖慢运行的速度。

这样,我们就会发现,列表中每一个元素对存储着各自的类型信息,各自都是一个完整的对象。但是,容器中所有的元素都是一个类型时,显然这种存储方式不合适。但不得不说,这是我们的动态数据类型必须付出的代价。

动态数据类型与python的array数组和Numpy的ndarray这些不可变数据类型的适用场景:

list等可变数据类型适用于需要不断对原始数据进行修改的场景。修改时的操作在原始数据的本身进行。

array、ndarray这种不灵活的数据类型,适用于我们想要保护原始数据不被修改的场景。当对原始数组进行修改操作时,会自动新建一个数组。

真假美猴王-Numpy数据与Python数组的区别与联系相关推荐

  1. python数组和函数的区别_真假美猴王-Numpy数据与Python数组的区别与联系!

    Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算.Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional a ...

  2. python 创建空的numpy数组_真假美猴王-Numpy数据与Python数组的区别与联系

    Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算.Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional a ...

  3. python怎样导入excel数据,如何将excel中的数据导入python数组?

    我有一个非常基本的神经网络.对于数组数据,要将数组指向excel文件中的数据,需要执行哪些代码?在 这是数据硬编码的代码.在 如何告诉数组查看计算机上的另一个文件?在import numpy as n ...

  4. python与大数据是什么_大数据和python有什么区别

    大数据(big data),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才 能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化 ...

  5. numpy.array和python列表的转换

    在python中使用echart时,发现echart要求y和x坐标是个列表,即输出形式是[1,2,3..],以逗号隔开的.之前没有搞懂是numpy.arrray和python列表的区别. 现在写一下两 ...

  6. java和oc_Java和OC中的数据容器和数组

    Java和OC中的数据容器和数组 在文章List/Set/Map的区别里我们讨论了Java的数据容器,由于其面向接口的编程特性,让我回忆了一下OC里面的「NSArray」和「NSMutableArra ...

  7. [转载] Python杂谈 | (6) numpy中array()和asarray()的区别

    参考链接: Python中的numpy.asarray numpy中的array()和asarray()方法非常类似,他们都可以接受列表或数组类型的数据作为参数.当他们的参数是列表型数据时,二者没有区 ...

  8. 图解数据分析(10) | Numpy - 与2维数组操作(数据科学家入门·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...

  9. python一维数组和二维数组_Python numpy实现二维数组和一维数组拼接的方法

    Python numpy实现二维数组和一维数组拼接的方法 撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape ...

最新文章

  1. 如何运用下载来的模板
  2. Pytorch List Tensor转Tensor,,reshape拼接等操作
  3. 一种医学图像分割的新思路【nnU-Net网络配置教程】
  4. java BlockingQueue 用法
  5. jzoj5365-[GDOI2018模拟9.14]通信【线段树合并】
  6. Asp.net网站开发架构设计要求
  7. java模式设计视频教程_全新JAVA设计模式详解视频教程 完整版课程
  8. android 测试 mock,Mock在Android TDD中的使用
  9. ASP.NET大闲话:ashx文件有啥用
  10. python正则表达式匹配字母和下划线_个英文字母、下划线或汉字的正则表达式
  11. 计算机三级之嵌入式系统学习笔记5
  12. MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
  13. Spring Framework 4.0相关计划公布---包括对于Java SE 8 和Groovy2的支持
  14. 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
  15. Windows+WSL+DockerDesktop下安装OpenV2X
  16. aplay amixer用法详解
  17. 计算机添加桌面小插件,一款实用的Windows小插件 ——桌面日历DesktopCal
  18. 【官方原版】Bootstrap Tooltips
  19. 如何制作ISO镜像文件
  20. mysql5.7架设征途服务器,征途服务端架设详细教程

热门文章

  1. 【性能测试】获取性能系统指标之示例Python代码
  2. GithubPages教程 在GithubPages上搭建个人主页
  3. 搜狐畅言评论系统使用
  4. 用Python实现喷墨打印机定期清洗喷头
  5. OpenStack 基础知识
  6. 带有功利性的做一件事 ?
  7. 苹果全球销量超越小米重回第二,荣耀回归国内手机市场第一梯队
  8. 【imx6ull-alientek-emmc】linux交叉编译环境 + 内核编译
  9. Unity3D占用内存详细解答
  10. (学习记录)Win32开发之键盘