Numpy基础教程之概念介绍

https://blog.csdn.net/chaipp0607/article/details/74566340

Numpy是应用Python进行科学计算时的基础模块。它是一个提供多维数组对象的Python库,除此之外,还包含了多种衍生的对象(比如掩码式数组(masked arrays)或矩阵)以及一系列的为快速计算数组而生的例程,包括数学运算,逻辑运算,形状操作,排序,选择,I/O,离散傅里叶变换,基本线性代数,基本统计运算,随机模拟等等。

Numpy库中最核心的部分是ndarray 对象。它封装了同构数据类型的n维数组,它的功能将通过演示代码的形式呈现。 NumPy数组和标准Python序列之间有几个重要区别:

(1)Numpy数组在创建时就会有一个固定的尺寸,这一点和Python中的list数据类型(可以动态生长)是不同的。当Numpy数组的尺寸发生改变时其实会删除之前的而创建一个新的数组。

(2)在一个Numpy数组中的所有元素数组类型要一致,并在内存中占有相同的大小。这里有一点例外:可以在Python的数组中包含Numpy的对象,这样的话就可以实现不同类型的元素。

(3)在数据量巨大时,使用Numpy进行高级数据运算和其他类型的操作是更为方便的。 通常情况下,这样的操作比使用Python的内置序列更有效,执行代码更少。

(4)越来越多的用于数学和科学计算Python库使用了Numpy,虽然这些第三方库也留了Python内置序列的输入接口,但是实际上在处理这些输入前还是要转成Numpy数组,平切这些库的输出一般是Numpy数组。换句话说,为了更好的使用当今大多数(甚至是绝大多数)用于数学/科学的Python库,仅仅知道Python本身是远远不够的。

在科学计算中序列的大小和速度是尤其重要的点。举个简单的例子:如果要将一个一维的序列a中的每一个数与另一个序列b(长度与a相同)。数据存放在python的list结构中,通过遍历列表可以得到:

c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

比如 a = [1,2,3],b = [1,1,1],那么 c = [1,2,3]

这样就能求出结果,但是如果a和b中包含了数百万个数,那么循环遍历的代价就会很高。好在我们有更高效的方法(为了更加清晰,我们忽略了变量的声明,初始化和内存分配的代码),比如用C/C++:

for (i = 0; i < rows; i++): {
  c[i] = a[i]*b[i];
}
  • 1
  • 2
  • 3

这种方式照比第一个代码,有效节约了所有涉及解释Python代码(append等等)和操作Python对象(len(a))所带来的开销,但是Python编程简单带来的好处就没有了(因为用了C~~)。此外,随着数组维数的增加,C代码遍历的消耗也会变大,比如在二维数组的情况下,代码要变为:

for (i = 0; i < rows; i++): {
  for (j = 0; j < columns; j++): {
    c[i][j] = a[i][j]*b[i][j];
  }
}

Numpy提供给我们的方式包含了二者的优势(Python的简单和C的效率),逐个元素操作只需要ndarray对象提供的“默认模式”,但是逐个元素的操作可以通过预编译的C代码快速执行。 在NumPy中:

c = a * b 

在这个例子中,它的速度和C代码接近,但是做到了像Python代码一样灰常简单的风格!事实上,Numpy的语法还要 更简单一些!上面的例子阐述NumPy中两个最基础也是最重要的功能:vectorization 和 broadcasting。

vectorization :代码中没有任何明确的循环,索引等 - 这些事情当然是在C编写的源码中完成的。 矢量化代码有很多优点,其中包括:

(1)简洁易读

(2)代码的行数更少(完成同样功能),这意味着更少的bug

(3)代码更像标准的数学符号

(4)比Python的代码更简单一些,避免了循环。

Broadcasting:是用于描述操作的隐含逐个元素行为的术语;
一般来说,在NumPy的所有操作中,不仅仅是算术运算,还有逻辑运算,位操作,功能性的运算,这些算法在表现形式上都隐藏了逐个元素操作的方式,即broadcast。

此外,在上述示例中,a和b可以是相同形状(shape)的多维数组,或标量和序列,或者甚至是具有不同形状的两个数组,只要较小的数组“可扩展”到较大的形状(shape)
以这样一种方式使得最终的broadcast是明确的。 有关broadcast的详细介绍,请参阅numpy.doc.broadcasting

NumPy完全支持面向对象的编程,再次说道ndarray。例如,ndarray是一个类,拥有众多的方法和属性。 它的许多方法在最外层的NumPy命名空间中镜像函数,使程序员能够完全自由地编写任何偏好的范例和最适合手头任务的代码。

原文地址:https://www.cnblogs.com/xzlq/p/9302082.html

时间: 2024-10-10 08:07:22

Numpy基础教程之概念介绍的相关文章

《统计自然语言处理》读书笔记 一.基础知识及概念介绍

最近准备学习自然语言处理相关的知识,主要参考<统计自然语言处理·宗成庆>和<Natural Language Processing with Python>,推荐大家阅读.第一篇主要介绍的是NLP的基础知识和概念介绍,其实也是我关于NLP的读书笔记吧,希望对大家有所帮助. 一. 概念介绍 自然语言处理 自然语言处理(Natural Language Processing,简称NLP)技术的产生可追溯到20世纪50年代,它是一门集语言学.数学(代数.概率).计算机科学和认知科学等于一

利用 Python 进行数据分析(四)NumPy 基础:ndarray 简单介绍

一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 二.ndarray 是什么 ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点. ndarray 的一个特点是同构:即其中所有元素的类型必须相同. 三.ndarray 的创建 array() 函数 最简单的方法, 使用 NumPy 提供的

python numpy 基础教程

Numpy简介 1.Numpy是什么 非常easy.Numpy是Python的一个科学计算的库.提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.事实上,list已经提供了类似于矩阵的表示形式,只是numpy为我们提供了很多其它的函数. 假设接触过matlab.scilab.那么numpy非常好入手. 在下面的代码演示样例中.总是先导入了numpy:(通用做法import numpu as np 简单输入) >>> import numpy as np >&g

numpy基础教程--对数组进行水平拼接和竖直拼接

在处理数组的时候经常要用到拼接,numpy中有两个非常实用的函数,可以快捷对数组进行拼接 1.hstack(tup)函数可以接收维度相同的数组,进行水平拼接. 2.vstack(tup)用来竖直拼接 演示代码如下: # coding = utf-8 import numpy as np import random t1 = np.arange(12).reshape(2, 6) t2 = np.arange(12, 24).reshape(2, 6) print(t1) print('\n')

cocos基础教程(4)数据结构介绍之cocos2d::Vector

cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容器std::vector. T - 元素类型 T的类型必须是继承自cocos2d::Object类型的指针.因为已经将Cocos2d-x的内存管理模型集成到了cocos2d::Vector<T>中,所以类型参数不能是其他的类型包括基本类型. 注意:使用现代的c+

cocos基础教程(4)数据结构介绍之cocos2d::Map&lt;K,V&gt;

1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value键值对组合成构成的关联性容器,允许基于键对单个元素进行快速检索. 2.模版参数 K - key value的类型. map中元素都由它的 key值作为唯一标识. V - mapped value的类型. T 必须是一个指向 cocos2d::Object 子类对象的指针. 3.内存管理 如果你在栈上声明了一个

cocos基础教程(4)数据结构介绍之cocos2d::Value

1.概述 cocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vector<Value>, std::unordered_map<std::string,Value> 和 std::unordered_map<int,Value> 的类. 你可以把所有上面的提及的原生类型放入 cocos2d::Value 对象中,然后将它们转化为对应的原生

db2基础教程

随着互联网(IT培训 计算机培训 电脑培训 )的飞速发展,信息的重要性早就体现出来,数据库(数据库培训 数据库认证 )是管理信息的好帮手,很多公司都推出了自己的数据库管理软件.DB2是IBM(IBM认证 IBM AIX培训 )公司开发的数据库管理软件,对DB2有兴趣的朋友请看下文介绍的<DB2基础教程>,这可是一本让你快速了解DB2基础的好书. (一)<DB2基础教程>内容介绍 DB2是IBM公司开发的一套数据库管理软件.在业界,IBM公司被公认为是优化技术方面的专家.目前DB2

OpenLayers3基础教程——OL3 介绍interaction

概述: 本节主要讲述OL3的交互操作interaction,重点介绍draw,select以及modify. 接口说明: OL3的interaction继承自ol.interaction.defaults,下面实现了以下几中交互操作: 创建方式为: var interaction = new ol.interaction.InteractionType({options});添加和移除方式为:map.addInteraction(draw);map.removeInteraction(draw)