Python之Numpy的超实用基础详细教程

Numpy在python中属于非常常用的包,无论是机器学习搭配pandas,还是数据可视化搭配pylab都是很正常的搭配。

Numpy

numpy的官方中文文档:NumPy 中文

NumPy是使用Python进行科学计算的基础软件包。除其他外,它包括:

  • 功能强大的N维数组对象;
  • 精密广播功能函数;
  • 集成C/C+和Fortran代码的工具;
  • 强大的线性代数、傅立叶变换和随机数功能。

更简单的说,Numpy是Python的Matlab数学计算包。使用它,python可以更简单便捷地对矩阵向量进行计算。

一般来说,我们引用该包并将其简称为np:

import numpy as np

Numpy的ndarry对象

ndarray的创建

Numpy中最重要的数据类型就是:N维数组对象ndarray。它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。

它具有以下两个特点:

  • ndarray对象是用于存放同类型元素的多维数组;
  • ndarray中的每个元素在内存中都有相同存储大小的区域。

创建一个ndarray对象:

np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

参数说明:

名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度

一般而言,并不需要记住这么多可选参数:

import numpy as np

if __name__ == "__main__":
 x = np.array([1, 2, 3])
 print(x)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[1 2 3]

当然,除了之前的array方法创建ndarray对象之外,还提供了另外的几种创建方式:

np.empty(shape, dtype = float, order = 'C')     # 指定形状的未初始化数组

np.zeros(shape, dtype = float, order = 'C')     # 指定形状的全0数组
np.ones(shape, dtype = None, order = 'C')      # 指定形状的全1数组

np.arange(start = 0, stop, step = 1, dtype)     # 从起始值到终止值(不包含)时,按步长从范围内创建数组

np.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None)  # 从起始值到终止值(默认包含)创建一个等差数组的一维数组
np.logspace(start, stop, num = 50, endpoint = True, base = 10.0, dtype = None) # 从起始值到终止值(默认包含)创建一个等比数组的一维数组

Numpy也提供了从python其他类型直接转换成ndarray的方式:

np.asarray(a, dtype = None, order = None)      # 列表形式
np.frombuffer(buffer, dtype = float, count = -1, offset = 0)      # 以流的形式读入
np.fromiter(iterable, dtype, count=-1)     # 从可迭代对象中,以迭代器的形式读入

例如:

import numpy as np

if __name__ == "__main__":
 a = [[1, 2 ,3], [4, 5]]
 b = 'Hello World'
 c = iter(range(5))

 x = np.asarray(a)
 y = np.frombuffer(b, dtype = 'S1')
 z = np.fromiter(c, dtype = float)

 print(x)
 print(y)
 print(z)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[list([1, 2, 3]) list([4, 5])]
['H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd']
[0. 1. 2. 3. 4.]

ndarray的数据结构

Numpy支持很多的数据类型,下面就简单地列举一下:

名称 描述
bool_ 布尔型数据类型(True或者False)
int_/int8/int16/int32/int64 有符号整数
uint8/uint16/uint32/uint64 无符号整数
float_/float16/float32/float64 浮点数
complex_/complex64/complex128 复数

但如果是自定义的数据类型,就需要通过dtype来确定了:

numpy.dtype(object, align, copy)

参数说明:

名称 描述
object 要转换为的数据类型对象
align 如果为true,填充字段使其类似C的结构体
copy 复制dtype对象 ,如果为false,则是对内置数据类型对象的引用

例如,可以创建一个student的对象:

import numpy as np

if __name__ == "__main__":
 student = np.dtype([('name', 'S20'), ('age', 'i8'), ('score', 'f4')])
 a = np.array([('zhangsan', 18, 80), ('lisi', 19, 85)], dtype=student)
 print(a)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[('zhangsan', 18, 80.) ('lisi', 19, 85.)]

ndarray的属性

ndarray有两个非常常用的属性,shape和size。shape表示数组的维度,对于二维数组而言,就是其行数和列数;size表示数组元素的总个数,对于二维数组而言,就是行数与列数的相乘。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6]])
 print(a.shape)
 print(a.size)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
(2, 3)
6

当然,ndarray对象提供了两种方式在不改变数据内容的情况下,改变一个数组的格式。但两种方式有所区别:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6]])
 a.shape = (3, 2)         # 直接改变本体
 print(a)
 b = a.reshape(2, 3)        # 本体不改变,将改变后的对象返回
 print(b)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[1 2]
 [3 4]
 [5 6]]
[[1 2 3]
 [4 5 6]]

ndarray的内容访问

ndarray对象的内容可以通过索引或切片来访问和修改,与python中list的切片操作一样。

ndarray既可以基于下标进行切片,也可以通过内置的slice函数,并设置start,stop及step参数进行,从原数组中切割出一个新数组。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.arange(10)
 b = a[1:7:1]
 s = slice(1,7,1)
 c = a[s]

 print(a)
 print(b)
 print(c)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[1 2 3 4 5 6]

对于冒号:的解释:

  • 如果是一维数组,如果只放置一个参数,如[2],将返回与该索引相对应的单个元素。如果为[2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如[2:7],那么则提取两个索引(不包括停止索引)之间的项;
  • 如果是多维数组,使用,区分维数。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.arange(25)
 a.shape = (5, 5)

 b = a[1:4, 2:4]
 print(a)
 print(b)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
[[ 7  8]
 [12 13]
 [17 18]]

ndarray除了基于下标进行切片,还有一些高级索引方式,比如布尔索引、花式索引。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.arange(25)
 a.shape = (5, 5)

 b = a[a > 6]
 c = a[[3, 2, 4]]
 print(a)
 print(b)
 print(c)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
[ 7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[[15 16 17 18 19]
 [10 11 12 13 14]
 [20 21 22 23 24]]

其他

判断元素对象是都为NaN:

np.isnan(...)

Numpy的广播

如果两个ndarray:a和b形状相同,即满足a.shape==b.shape,那么a与b的算数结果就是a与b数组对应位做算术运算。这要求维数相同,且各维度的长度相同。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.array([1, 2, 3])
 b = np.array([1, 2, 3])
 c = a + b
 d = a * b

 print(c)
 print(d)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[2 4 6]
[1 4 9]

而,广播是Numpy对不同形状(shape)的ndarray进行数值计算的方式,对ndarray的算术运算通常在相应的元素上进行

怎么才算是相应的元素呢?

虽然,广播是对不同形状(shape)而言,但其实还是要满足两个条件:列数相同,有一个行数为1。在这个前提下,每行的相同列的元素就是相对应的元素。

直接看文字可能还是有点不太能理解,可以看一下例子:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
 b = np.array([1, 2, 3])
 c = a + b
 d = a * b

 print(c)
 print(d)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
[[ 1  4  9]
 [ 4 10 18]
 [ 7 16 27]]

所谓广播就是:当列数相同的时候,行数为1的ndarray会进行扩行的操作,增加的行数内容与原行的内容相同。

扩行的实现可以通过tile函数实现:

np.tile(obj, (行, 列))    # 在行上和列上分别重复一定的次数

所以,上文的广播也可以通过下面的方式来代替:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
 b = np.array([1, 2, 3])
 bb = np.tile(b, (3, 1))
 c = a + bb
 d = a * bb

 print(bb)
 print(c)
 print(d)

运行该脚本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[1 2 3]
 [1 2 3]
 [1 2 3]]
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
[[ 1  4  9]
 [ 4 10 18]
 [ 7 16 27]]

ndarray的函数

ndarray提供了很多的数学函数、算术函数、排序函数,以便进行运算。

ndarray的数学函数,例如:

np.pi          # 圆周率
np.sin(obj)       # 三角运算
np.cos(obj)
np.tan(obj)
np.arcsin(obj)     # 反三角运算
np.arccos(obj)
np.arctan(obj)
np.degrees(obj)     # 将弧度值转换为角度值

np.around(obj, decimals) # 返回ndarray每个元素的四舍五入值,decimals为舍入的小数位数,默认为0
np.floor(obj)      # 向下取整
np.ceil(obj)      # 向上取整

ndarray的算术函数,例如:

np.add(obj1, obj2)        # 加减乘除运算,与+-*/效果一致,需要符合广播原则
np.subtract(obj1, obj2)
np.multiply(obj1, obj2)
np.divide(obj1, obj2)
np.mod(obj1, obj2)        # 求余数运算

np.reciprocal(obj)        # 元素取倒数

np.power(obj1, obj2)       # 计算前参数为底,后参数为幂的值

ndarray的排序函数,例如:

np.sort(obj, axis=1, kind='quicksort', order)

参数说明:

名称 描述
obj 数组或嵌套的数列
axis axis=0按列排序,axis=1按行排序
kind ‘quicksort'、‘mergesort'、‘heapsort'
order 如果数组包含字段,则是要排序的字段

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python中的Numpy入门教程

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数.如果接触过matlab.scilab,那么numpy很好入手. 在以下的代码示例中,总是先导入了numpy: 复制代码 代码如下: >>> import numpy as np>>> print np.version.version1.6.2

  • Python中的二维数组实例(list与numpy.array)

    关于python中的二维数组,主要有list和numpy.array两种. 好吧,其实还有matrices,但它必须是2维的,而numpy arrays (ndarrays) 可以是多维的. 我们主要讨论list和numpy.array的区别: 我们可以通过以下的代码看出二者的区别 >>import numpy as np >>a=[[1,2,3],[4,5,6],[7,8,9]] >>a [[1,2,3],[4,5,6],[7,8,9]] >>type(a

  • Python numpy 提取矩阵的某一行或某一列的实例

    如下所示: import numpy as np a=np.arange(9).reshape(3,3) a Out[31]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) 矩阵的某一行 a[1] Out[32]: array([3, 4, 5]) 矩阵的某一列 a[:,1] Out[33]: array([1, 4, 7]) b=np.eye(3,3) b Out[36]: array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0.,

  • Python Numpy 数组的初始化和基本操作

    Python 是一种高级的,动态的,多泛型的编程语言.Python代码很多时候看起来就像是伪代码一样,因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法. 一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组中全部元素的数量 ndarray.dtype:数组中元素的类型(numpy.int32, numpy.int16, and num

  • Python编程给numpy矩阵添加一列方法示例

    首先我们有一个数据是一个mn的numpy矩阵现在我们希望能够进行给他加上一列变成一个m(n+1)的矩阵 import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.ones(3) c = np.array([[1,2,3,1],[4,5,6,1],[7,8,9,1]]) PRint(a) print(b) print(c) [[1 2 3] [4 5 6] [7 8 9]] [ 1. 1. 1.] [[1 2 3 1] [4

  • Python numpy中矩阵的基本用法汇总

    Python矩阵的基本用法 mat()函数将目标数据的类型转化成矩阵(matrix) 1,mat()函数和array()函数的区别 Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价. 直接看一个例子: import numpy as np a = np.mat('1 3;5 7')

  • python中numpy的矩阵、多维数组的用法

    1. 引言 最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的.目前为止,觉得就算法仿真研究而言,还是matlab用得特别舒服,可能是比较熟悉的缘故吧.matlab直接集成了很多算法工具箱,函数查询.调用.变量查询等非常方便,或许以后用久了python也会感觉很好用.与python相比,最喜欢的莫过于可以直接选中某段代码执行了,操作方便,python也可以实现,就是感觉不是很方便. 言归正传,做算法要用

  • 基于Python Numpy的数组array和矩阵matrix详解

    NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下). 结果是: 线性代数中秩的定义:设在矩阵A中有一个不等于0的r阶子式D,且所有r+1阶子式(如果存在的话)全等于0,那末D称为矩阵

  • Python中优化NumPy包使用性能的教程

    NumPy是Python中众多科学软件包的基础.它提供了一个特殊的数据类型ndarray,其在向量计算上做了优化.这个对象是科学数值计算中大多数算法的核心. 相比于原生的Python,利用NumPy数组可以获得显著的性能加速,尤其是当你的计算遵循单指令多数据流(SIMD)范式时.然而,利用NumPy也有可能有意无意地写出未优化的代码. 在这篇文章中,我们将看到一些技巧,这些技巧可以帮助你编写高效的NumPy代码.我们首先看一下如何避免不必要的数组拷贝,以节省时间和内存.因此,我们将需要深入Num

  • Python之Numpy的超实用基础详细教程

    Numpy在python中属于非常常用的包,无论是机器学习搭配pandas,还是数据可视化搭配pylab都是很正常的搭配. Numpy numpy的官方中文文档:NumPy 中文 NumPy是使用Python进行科学计算的基础软件包.除其他外,它包括: 功能强大的N维数组对象: 精密广播功能函数: 集成C/C+和Fortran代码的工具: 强大的线性代数.傅立叶变换和随机数功能. 更简单的说,Numpy是Python的Matlab数学计算包.使用它,python可以更简单便捷地对矩阵向量进行计算

  • python安装numpy&安装matplotlib& scipy的教程

    numpy安装 下载地址:https://pypi.python.org/pypi/numpy(各取所需) copy安装目录.eg:鄙人的D:\python3.6.1\Scripts pip install :eg: win+R ----->  CMD ---->    pip install D:\python3.6.1\Scripts\numpy-1.13.0rc2-cp36-none-win_amd64.whl 安装成功: 同理: 安装matplotlib 安装scipy 以上这篇pyt

  • python中spy++的使用超详细教程

    1.spy++的基本操作 我们下载spy++: Microsoft Spy++ V15.0.26724.1 简体中文绿色版 64位 1.1 窗口属性查找 拖住中间的"寻找工具"放到想要定位的软件上,然后松开 以微信为例,我们会得到"微信"这个窗口的句柄,为"00031510",注意这个句柄是"十六进制",即"0x31510". 点击ok我们会看到更详细的属性信息 1.2 窗口spy++定位 同理拖放到&qu

  • python爬虫scrapy基本使用超详细教程

    一.介绍 官方文档:中文2.3版本 下面这张图大家应该很熟悉,很多有关scrapy框架的介绍中都会出现这张图,感兴趣的再去查询相关资料,当然学会使用scrapy才是最主要的. 二.基本使用 2.1 环境安装 1.linux和mac操作系统: pip install scrapy 2.windows系统: 先安装wheel:pip install wheel 下载twisted:下载地址 安装twisted:pip install Twisted‑17.1.0‑cp36‑cp36m‑win_amd

  • 教你如何使用Python下载B站视频的详细教程

    前言 众所周知,网页版的B站无法下载视频,然本人喜欢经常在B站学习,奈何没有网时,无法观看视频资源,手机下载后屏幕太小又不想看,遂写此程序以解决此问题 步骤 话不多说,进入正题 1.在电脑上下载python的开发环境,点一下,观看具体步骤 2.下载pycharm开发工具,点一下观看具体步骤 3.同时按键盘上的win键与r键,在弹出的对话框中输入cmd 点击确定进入cmd命令行,在里面输入pip install you-get,之后按键盘enter键,进行you-get的下载,下载完后退出cmd

  • Python运算符的应用超全面详细教程

    目录 一.算术运算符 加号 + 乘号 * 除号 / 取余% 幂次运算 ** 取整 // 二.逻辑运算符 逻辑与 and 逻辑或 or 逻辑非 not 三.赋值运算符 四.成员运算符 五.身份运算符 六.比较运算符 七.三目运算符 八.运算符的优先级 总结 一.算术运算符 算术运算符是大部分情况下是实现对数值的运算,少部分可以实现对字符的操作 运算符符号 描述 + 加(可对字符进行拼接操作) - 减 * 乘(可对字符进行操作) / 除以 % 取余,返回除数的余数 ** 幂次运算 // 返回商的整数

  • Python Numpy库的超详细教程

    1.Numpy概述 1.1 概念 Python本身含有列表和数组,但对于大数据来说,这些结构是有很多不足的.由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.对于数值运算来说这种 结构比较浪费内存和CPU资源.至于数组对象,它可以直接保存 数值,和C语言的一维数组比较类似.但是由于它不支持多维,在上面的函数也不多,因此也不适合做数值运算.Numpy提供了两种基本的对象:ndarray(N-dimensional Array Object)和 ufunc(Universal Funct

  • Python Numpy库的超详细教程

    1.Numpy概述 1.1 概念 Python本身含有列表和数组,但对于大数据来说,这些结构是有很多不足的.由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.对于数值运算来说这种 结构比较浪费内存和CPU资源.至于数组对象,它可以直接保存 数值,和C语言的一维数组比较类似.但是由于它不支持多维,在上面的函数也不多,因此也不适合做数值运算.Numpy提供了两种基本的对象:ndarray(N-dimensional Array Object)和 ufunc(Universal Funct

  • Python Matplotlib绘图基础详细教程

    目录 1. 画图的基本步骤 1.1一步一步看 2.散点图 3.条形图的绘制 4.四幅子图的绘制 5.饼状图的绘制 6.热力图的绘制 总结 plt是最常用的接口 1. 画图的基本步骤 1.导入模块 import matplotlib as mpl import matplotlib.pyplot as plt 2.创建画板,然后对画板进行调整 3.定义数据 4.绘制图形(包含坐标轴的设置,数据的导入,线条的样式,颜色,还有标题,图例,等等) 5.plt.show() 1.1一步一步看 1.1.1*

  • Python编辑器Pycharm安装配置超详细教程

    今天给大家推荐一款很好用的Python编辑器,全世界90%Python开发者都会用的开发工具------Pycharm,完全免费哦 1. 百度搜索pycharm,进入pycharm官网,带有’PyCharm: the Python IDE for Professional’字样的就是官网 2. 在官网首页点击如下图所示任意’Download’进入下载页面 3. 在下载页面有如下图两个下载接口,一个专业版,一个社区版,推荐使用社区版,免费,然后点击右边红框里面的’Download’进行下载,这里下

随机推荐