前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最全的NumPy教程

最全的NumPy教程

作者头像
Python小二
发布2020-12-18 16:00:40
4K0
发布2020-12-18 16:00:40
举报
文章被收录于专栏:Python小二Python小二

NumPy - 简介

NumPy 是一个 Python 包。它代表 “Numeric Python”。它是一个由多维数组对象和用于处理数组的例程集合组成的库。

Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。也开发了另一个包 Numarray ,它拥有一些额外的功能。2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。这个开源项目有很多贡献者。

NumPy 操作

使用NumPy,开发人员可以执行以下操作:

  • 数组的算数和逻辑运算。
  • 傅立叶变换和用于图形操作的例程。
  • 与线性代数有关的操作。NumPy 拥有线性代数和随机数生成的内置函数。

NumPy – MatLab 的替代之一

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。

NumPy 是开源的,这是它的一个额外的优势。

NumPy - 环境

在线尝试

我们已经在线设置了 NumPy 编程环境,以便在线编译和执行所有可用的示例。它向你提供了信心,并使您能够使用不同的选项验证程序, 随意修改任何示例并在线执行。

使用我们的在线编译器尝试一下示例,它位于 CodingGround

https://www.tutorialspoint.com/codingground.htm

代码语言:javascript
复制
import numpy as np  
a =  'hello world'  
print a

对于本教程中给出的大多数示例,你会在我们的网站代码部分的右上角找到一个Try it选项,这会把你带到在线编译器。所以快来使用它,享受你的学习吧。

标准的 Python 发行版不会与 NumPy 模块捆绑在一起。一个轻量级的替代方法是使用流行的 Python 包安装程序 pip 来安装 NumPy。

代码语言:javascript
复制
pip install numpy

启用 NumPy 的最佳方法是使用特定于您的操作系统的可安装的二进制包。这些二进制包含完整的 SciPy 技术栈(包括 NumPy,SciPy,matplotlib,IPython,SymPy 以及 Python 核心自带的其它包)。

NumPy - Ndarray 对象

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。

ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。

ndarray类的实例可以通过本教程后面描述的不同的数组创建例程来构造。基本的ndarray是使用 NumPy 中的数组函数创建的,如下所示:

代码语言:javascript
复制
numpy.array

它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。

代码语言:javascript
复制
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

上面的构造器接受以下参数:

代码语言:javascript
复制
object
 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。

看看下面的例子来更好地理解。

示例 1

代码语言:javascript
复制
import numpy as np 
a = np.array([1,2,3])  
print a

输出如下:

代码语言:javascript
复制
[1, 2, 3]

示例 2

代码语言:javascript
复制
# 多于一个维度  
import numpy as np 
a = np.array([[1,  2],  [3,  4]])  
print a

输出如下:

代码语言:javascript
复制
[[1, 2] 
 [3, 4]]

示例 3

代码语言:javascript
复制
# 最小维度  
import numpy as np 
a = np.array([1,  2,  3,4,5], ndmin =  2)  
print a

输出如下:

代码语言:javascript
复制
[[1, 2, 3, 4, 5]]

示例 4

代码语言:javascript
复制
# dtype 参数  
import numpy as np 
a = np.array([1,  2,  3], dtype = complex)  
print a

输出如下:

代码语言:javascript
复制
[ 1.+0.j,  2.+0.j,  3.+0.j]

**ndarray ** 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。

NumPy - 数据类型

NumPy 支持比 Python 更多种类的数值类型。下表显示了 NumPy 中定义的不同标量数据类型。

代码语言:javascript
复制
bool_
 存储为一个字节的布尔值(真或假)

NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。这些类型可以是np.bool_np.float32等。

数据类型对象 (dtype)

数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:

  • 数据类型(整数、浮点或者 Python 对象)
  • 数据大小
  • 字节序(小端或大端)
  • 在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。
  • 如果数据类型是子序列,它的形状和数据类型。

字节顺序取决于数据类型的前缀<><意味着编码是小端(最小有效字节存储在最小地址中)。 >意味着编码是大端(最大有效字节存储在最小地址中)。

dtype可由一下语法构造:

代码语言:javascript
复制
numpy.dtype(object, align, copy)

参数为:

  • Object:被转换为数据类型的对象。
  • Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。
  • Copy:生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。

示例 1

代码语言:javascript
复制
# 使用数组标量类型  
import numpy as np 
dt = np.dtype(np.int32)  
print dt

输出如下:

代码语言:javascript
复制
int32

示例 2

代码语言:javascript
复制
#int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他。 
import numpy as np 

dt = np.dtype('i4')  
print dt

输出如下:

代码语言:javascript
复制
int32

示例 3

代码语言:javascript
复制
# 使用端记号  
import numpy as np 
dt = np.dtype('>i4')  
print dt

输出如下:

代码语言:javascript
复制
>i4

下面的例子展示了结构化数据类型的使用。这里声明了字段名称和相应的标量数据类型。

示例 4

代码语言:javascript
复制
# 首先创建结构化数据类型。 
import numpy as np 
dt = np.dtype([('age',np.int8)])  
print dt

输出如下:

代码语言:javascript
复制
[('age', 'i1')]

示例 5

代码语言:javascript
复制
# 现在将其应用于 ndarray 对象  
import numpy as np 

dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt)  
print a

输出如下:

代码语言:javascript
复制
[(10,) (20,) (30,)]

示例 6

代码语言:javascript
复制
# 文件名称可用于访问 age 列的内容  
import numpy as np 

dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt)  
print a['age']

输出如下:

代码语言:javascript
复制
[10 20 30]

示例 7

以下示例定义名为 student 的结构化数据类型,其中包含字符串字段name,整数字段age和浮点字段marks。此dtype应用于ndarray对象。

代码语言:javascript
复制
import numpy as np 
student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])  
print student

输出如下:

代码语言:javascript
复制
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]

示例 8

代码语言:javascript
复制
import numpy as np 

student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')]) 
a = np.array([('abc',  21,  50),('xyz',  18,  75)], dtype = student)  
print a

输出如下:

代码语言:javascript
复制
[('abc', 21, 50.0), ('xyz', 18, 75.0)]

每个内建类型都有一个唯一定义它的字符代码:

  • 'b':布尔值
  • 'i':符号整数
  • 'u':无符号整数
  • 'f':浮点
  • 'c':复数浮点
  • 'm':时间间隔
  • 'M':日期时间
  • 'O':Python 对象
  • 'S', 'a':字节串
  • 'U':Unicode
  • 'V':原始数据(void

NumPy - 数组属性

这一章中,我们会讨论 NumPy 的多种数组属性。

ndarray.shape

这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。

示例 1

代码语言:javascript
复制
import numpy as np 
a = np.array([[1,2,3],[4,5,6]])  
print a.shape

输出如下:

代码语言:javascript
复制
(2, 3)

示例 2

NumPy 也提供了reshape函数来调整数组大小。

代码语言:javascript
复制
import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2)  
print b

输出如下:

代码语言:javascript
复制
[[1, 2] 
 [3, 4] 
 [5, 6]]

NumPy - 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,就像 Python 的内置容器对象一样。

如前所述,ndarray对象中的元素遵循基于零的索引。有三种可用的索引方法类型:字段访问,基本切片高级索引

基本切片是 Python 中基本切片概念到 n 维的扩展。通过将startstopstep参数提供给内置的slice函数来构造一个 Python slice对象。此slice对象被传递给数组来提取数组的一部分。

示例 1

代码语言:javascript
复制
import numpy as np
a = np.arange(10)
s = slice(2,7,2)  
print a[s]

输出如下:

代码语言:javascript
复制
[2  4  6]

在上面的例子中,ndarray对象由arange()函数创建。然后,分别用起始,终止和步长值272定义切片对象。当这个切片对象传递给ndarray时,会对它的一部分进行切片,从索引27,步长为2

通过将由冒号分隔的切片参数(start:stop:step)直接提供给ndarray对象,也可以获得相同的结果。

示例 2

代码语言:javascript
复制
import numpy as np
a = np.arange(10)
b = a[2:7:2]  
print b

输出如下:

代码语言:javascript
复制
[2  4  6]

如果只输入一个参数,则将返回与索引对应的单个项目。如果使用a:,则从该索引向后的所有项目将被提取。如果使用两个参数(以:分隔),则对两个索引(不包括停止索引)之间的元素以默认步骤进行切片。

NumPy - 高级索引

如果一个ndarray是非元组序列,数据类型为整数或布尔值的ndarray,或者至少一个元素为序列对象的元组,我们就能够用它来索引ndarray。高级索引始终返回数据的副本。与此相反,切片只提供了一个视图。

有两种类型的高级索引:整数和布尔值。

整数索引

这种机制有助于基于 N 维索引来获取数组中任意元素。每个整数数组表示该维度的下标值。当索引的元素个数就是目标ndarray的维度时,会变得相当直接。

以下示例获取了ndarray对象中每一行指定列的一个元素。因此,行索引包含所有行号,列索引指定要选择的元素。

示例

代码语言:javascript
复制
import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我们的数组是:'  
print x 
print  '\n'  
# 切片
z = x[1:4,1:3]  
print  '切片之后,我们的数组变为:'  
print z 
print  '\n'  
# 对列使用高级索引 
y = x[1:4,[1,2]] 
print  '对列使用高级索引来切片:'  
print y

输出如下:

代码语言:javascript
复制
我们的数组是:
[[ 0  1  2] 
 [ 3  4  5] 
 [ 6  7  8]
 [ 9 10 11]]
切片之后,我们的数组变为:
[[ 4  5]
 [ 7  8]
 [10 11]]
对列使用高级索引来切片:
[[ 4  5]
 [ 7  8]
 [10 11]]

布尔索引

当结果对象是布尔运算(例如比较运算符)的结果时,将使用此类型的高级索引。

示例

这个例子中,大于 5 的元素会作为布尔索引的结果返回。

代码语言:javascript
复制
import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我们的数组是:'  
print x 
print  '\n'  
# 现在我们会打印出大于 5 的元素  
print  '大于 5 的元素是:'  
print x[x >  5]

输出如下:

代码语言:javascript
复制
我们的数组是:
[[ 0  1  2] 
 [ 3  4  5] 
 [ 6  7  8] 
 [ 9 10 11]] 
大于 5 的元素是:
[ 6  7  8  9 10 11]

NumPy - 广播

术语广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在相应的元素上进行。如果两个阵列具有完全相同的形状,则这些操作被无缝执行。

示例

代码语言:javascript
复制
import numpy as np 

a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print c

输出如下:

代码语言:javascript
复制
[10   40   90   160]

如果两个数组的维数不相同,则元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

如果满足以下规则,可以进行广播:

  • ndim较小的数组会在前面追加一个长度为 1 的维度。
  • 输出数组的每个维度的大小是输入数组该维度大小的最大值。
  • 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则在计算中可它。
  • 如果输入的某个维度大小为 1,则该维度中的第一个数据元素将用于该维度的所有计算。

如果上述规则产生有效结果,并且满足以下条件之一,那么数组被称为可广播的

  • 数组拥有相同形状。
  • 数组拥有相同的维数,每个维度拥有相同长度,或者长度为 1。
  • 数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立。

NumPy - 数组上的迭代

NumPy 包包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。数组的每个元素可使用 Python 的标准Iterator接口来访问。

让我们使用arange()函数创建一个 3X4 数组,并使用nditer对它进行迭代。

示例

代码语言:javascript
复制
import numpy as np
a = np.arange(0,60,5) 
a = a.reshape(3,4)  
print  '原始数组是:'  
print a print  '\n'  
print  '修改后的数组是:'  
for x in np.nditer(a):  
    print x,

输出如下:

代码语言:javascript
复制
原始数组是:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]
修改后的数组是:
0 5 10 15 20 25 30 35 40 45 50 55

NumPy - 数组操作

NumPy包中有几个例程用于处理ndarray对象中的元素。它们可以分为以下类型:

修改形状

代码语言:javascript
复制
reshape
 不改变数据的条件下修改形状

numpy.reshape

这个函数在不改变数据的条件下修改形状,它接受如下参数:

代码语言:javascript
复制
numpy.reshape(arr, newshape, order)

其中:

  • arr:要修改形状的数组
  • newshape:整数或者整数数组,新的形状应当兼容原有形状
  • order'C'为 C 风格顺序,'F'为 F 风格顺序,'A'为保留原顺序。

例子

代码语言:javascript
复制
import numpy as np
a = np.arange(8)
print '原始数组:'
print a
print '\n'
b = a.reshape(4,2)
print '修改后的数组:'
print b

输出如下:

代码语言:javascript
复制
原始数组:
[0 1 2 3 4 5 6 7]

修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]

numpy.ndarray.flat

该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器。

例子

代码语言:javascript
复制
import numpy as np 
a = np.arange(8).reshape(2,4) 
print '原始数组:' 
print a 
print '\n' 
print '调用 flat 函数之后:' 
# 返回展开数组中的下标的对应元素 
print a.flat[5]

输出如下:

代码语言:javascript
复制
原始数组:
[[0 1 2 3]
 [4 5 6 7]]
调用 flat 函数之后:
5

numpy.ndarray.flatten

该函数返回折叠为一维的数组副本,函数接受下列参数:

代码语言:javascript
复制
ndarray.flatten(order)

其中:

  • order'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。

例子

代码语言:javascript
复制
import numpy as np 
a = np.arange(8).reshape(2,4) 

print '原数组:' 
print a 
print '\n'  
# default is column-major 
print '展开的数组:' 
print a.flatten() 
print '\n'  
print '以 F 风格顺序展开的数组:' 
print a.flatten(order = 'F')

输出如下:

代码语言:javascript
复制
原数组:
[[0 1 2 3]
 [4 5 6 7]]
展开的数组:
[0 1 2 3 4 5 6 7]
以 F 风格顺序展开的数组:
[0 4 1 5 2 6 3 7]

numpy.ravel

这个函数返回展开的一维数组,并且按需生成副本。返回的数组和输入数组拥有相同数据类型。这个函数接受两个参数。

代码语言:javascript
复制
numpy.ravel(a, order)

构造器接受下列参数:

  • order'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。

例子

代码语言:javascript
复制
import numpy as np 
a = np.arange(8).reshape(2,4) 

print '原数组:' 
print a 
print '\n'  
print '调用 ravel 函数之后:' 
print a.ravel()  
print '\n' 
print '以 F 风格顺序调用 ravel 函数之后:' 
print a.ravel(order = 'F')

输出如下:

代码语言:javascript
复制
原数组:
[[0 1 2 3]
 [4 5 6 7]]

调用 ravel 函数之后:
[0 1 2 3 4 5 6 7]

以 F 风格顺序调用 ravel 函数之后:
[0 4 1 5 2 6 3 7]

翻转操作

代码语言:javascript
复制
transpose
 翻转数组的维度

修改维度

代码语言:javascript
复制
broadcast
 产生模仿广播的对象

数组的连接

代码语言:javascript
复制
concatenate
 沿着现存的轴连接数据序列

数组分割

代码语言:javascript
复制
split
 将一个数组分割为多个子数组

添加/删除元素

代码语言:javascript
复制
resize
 返回指定形状的新数组

NumPy - 位操作

下面是 NumPy 包中可用的位操作函数。

代码语言:javascript
复制
bitwise_and
 对数组元素执行位与操作

示例

代码语言:javascript
复制
import numpy as np
print '13 和 17 的二进制形式:'
a,b = 13,17
print bin(a), bin(b)
print '\n'
print '13 和 17 的位与:'
print np.bitwise_and(13, 17)

输出如下:

代码语言:javascript
复制
13 和 17 的二进制形式:
0b1101 0b10001

13 和 17 的位与:
1

你可以使用下表验证此输出。考虑下面的位与真值表。

A

B

AND

1

1

1

1

0

0

0

1

0

0

0

0

NumPy - 字符串函数

以下函数用于对dtypenumpy.string_numpy.unicode_的数组执行向量化字符串操作。它们基于 Python 内置库中的标准字符串函数。

代码语言:javascript
复制
add()
 返回两个str
或Unicode
数组的逐个字符串连接

这些函数在字符数组类(numpy.char)中定义。较旧的 Numarray 包包含chararray类。numpy.char类中的上述函数在执行向量化字符串操作时非常有用。

示例

代码语言:javascript
复制
import numpy as np 
print '连接两个字符串:' 
print np.char.add(['hello'],[' xyz']) 
print '\n'
print '连接示例:' 
print np.char.add(['hello', 'hi'],[' abc', ' xyz'])

输出如下:

代码语言:javascript
复制
连接两个字符串:
['hello xyz']

连接示例:
['hello abc' 'hi xyz']

NumPy - 算数函数

很容易理解的是,NumPy 包含大量的各种数学运算功能。NumPy 提供标准的三角函数,算术运算的函数,复数处理函数等。

三角函数

NumPy 拥有标准的三角函数,它为弧度制单位的给定角度返回三角函数比值。

舍入函数

numpy.around()

这个函数返回四舍五入到所需精度的值。该函数接受以下参数。

代码语言:javascript
复制
numpy.around(a,decimals)

其中:

代码语言:javascript
复制
a
 输入数组

NumPy - 算数运算

用于执行算术运算(如add()subtract()multiply()divide())的输入数组必须具有相同的形状或符合数组广播规则。

示例

代码语言:javascript
复制
import numpy as np 
a = np.arange(9, dtype = np.float_).reshape(3,3)  
print  '第一个数组:'  
print a 
print  '\n'  
print  '第二个数组:' 
b = np.array([10,10,10])  
print b 
print  '\n'  
print  '两个数组相加:'  
print np.add(a,b)  
print  '\n'  
print  '两个数组相减:'  
print np.subtract(a,b)  
print  '\n'  
print  '两个数组相乘:'  
print np.multiply(a,b)  
print  '\n'  
print  '两个数组相除:'  
print np.divide(a,b)

输出如下:

代码语言:javascript
复制
第一个数组:
[[ 0. 1. 2.]
 [ 3. 4. 5.]
 [ 6. 7. 8.]]

第二个数组:
[10 10 10]

两个数组相加:
[[ 10. 11. 12.]
 [ 13. 14. 15.]
 [ 16. 17. 18.]]

两个数组相减:
[[-10. -9. -8.]
 [ -7. -6. -5.]
 [ -4. -3. -2.]]

两个数组相乘:
[[ 0. 10. 20.]
 [ 30. 40. 50.]
 [ 60. 70. 80.]]

两个数组相除:
[[ 0. 0.1 0.2]
 [ 0.3 0.4 0.5]
 [ 0.6 0.7 0.8]]

NumPy - 统计函数

NumPy 有很多有用的统计函数,用于从数组中给定的元素中查找最小,最大,百分标准差和方差等。函数说明如下:

numpy.amin()numpy.amax()

这些函数从给定数组中的元素沿指定轴返回最小值和最大值。

numpy.ptp()

numpy.ptp()函数返回沿轴的值的范围(最大值 - 最小值)。

numpy.percentile()

百分位数是统计中使用的度量,表示小于这个值得观察值占某个百分比。函数numpy.percentile()接受以下参数。

代码语言:javascript
复制
numpy.percentile(a, q, axis)

其中:

代码语言:javascript
复制
a
 输入数组

numpy.median()

中值定义为将数据样本的上半部分与下半部分分开的值。 numpy.median()函数的用法如下面的程序所示。

numpy.mean()

算术平均值是沿轴的元素的总和除以元素的数量。 numpy.mean()函数返回数组中元素的算术平均值。如果提供了轴,则沿其计算。

numpy.average()

加权平均值是由每个分量乘以反映其重要性的因子得到的平均值。 numpy.average()函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。该函数可以接受一个轴参数。如果没有指定轴,则数组会被展开。

考虑数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。

代码语言:javascript
复制
加权平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)

标准差

标准差是与均值的偏差的平方的平均值的平方根。标准差公式如下:

代码语言:javascript
复制
std = sqrt(mean((x - x.mean())**2))

如果数组是[1,2,3,4],则其平均值为2.5。因此,差的平方是[2.25,0.25,0.25,2.25],并且其平均值的平方根除以4,即sqrt(5/4)是1.1180339887498949。

方差

方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。

NumPy - 排序、搜索和计数函数

NumPy中提供了各种排序相关功能。这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。下表显示了三种排序算法的比较。

种类

速度

最坏情况

工作空间

稳定性

'quicksort'(快速排序)

1

O(n^2)

0

'mergesort'(归并排序)

2

O(n*log(n))

~n/2

'heapsort'(堆排序)

3

O(n*log(n))

0

示例

代码语言:javascript
复制
import numpy as np  
a = np.array([[3,7],[9,1]])  
print  '我们的数组是:'  
print a 
print  '\n'  
print  '调用 sort() 函数:'  
print np.sort(a)  
print  '\n'  
print  '沿轴 0 排序:'  
print np.sort(a, axis =  0)  
print  '\n'  
# 在 sort 函数中排序字段 
dt = np.dtype([('name',  'S10'),('age',  int)]) 
a = np.array([("raju",21),("anil",25),("ravi",  17),  ("amar",27)], dtype = dt)  
print  '我们的数组是:'  
print a 
print  '\n'  
print  '按 name 排序:'  
print np.sort(a, order =  'name')

输出如下:

代码语言:javascript
复制
我们的数组是:
[[3 7]
 [9 1]]
调用 sort() 函数:
[[3 7]
 [1 9]]
沿轴 0 排序:
[[3 1]
 [9 7]]
我们的数组是:
[('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]
按 name 排序:
[('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]

NumPy - 线性代数

NumPy 包包含numpy.linalg模块,提供线性代数所需的所有功能。此模块中的一些重要功能如下表所述。

代码语言:javascript
复制
dot
 两个数组的点积

示例

代码语言:javascript
复制
import numpy.matlib 
import numpy as np 

a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
np.dot(a,b)

输出如下:

代码语言:javascript
复制
[[37  40] 
 [85  92]]

NumPy - Matplotlib

Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

Matplotlib 模块最初是由 John D. Hunter 编写的。自 2012 年以来,Michael Droettboom 是主要开发者。目前,Matplotlib 1.5.1 是可用的稳定版本。该软件包可以二进制分发,其源代码形式在 www.matplotlib.org 上提供。

通常,通过添加以下语句将包导入到 Python 脚本中:

代码语言:javascript
复制
from matplotlib import pyplot as plt

这里pyplot()是 matplotlib 库中最重要的函数,用于绘制 2D 数据。以下脚本绘制方程y = 2x + 5

示例

代码语言:javascript
复制
import numpy as np 
from matplotlib import pyplot as plt 

x = np.arange(1,11) 
y =  2  * x +  5 
plt.title("Matplotlib demo") 
plt.xlabel("x axis caption") 
plt.ylabel("y axis caption") 
plt.plot(x,y) 
plt.show()

ndarray对象xnp.arange()函数创建为x轴上的值。y轴上的对应值存储在另一个数组对象y中。这些值使用matplotlib软件包的pyplot子模块的plot()函数绘制。

图形由show()函数展示。

上面的代码应该产生以下输出:

作为线性图的替代,可以通过向plot()函数添加格式字符串来显示离散值。可以使用以下格式化字符。

字符

描述

'-'

实线样式

'--'

短横线样式

'-.'

点划线样式

':'

虚线样式

'.'

点标记

','

像素标记

'o'

圆标记

'v'

倒三角标记

'^'

正三角标记

'<'

左三角标记

'>'

右三角标记

'1'

下箭头标记

'2'

上箭头标记

'3'

左箭头标记

'4'

右箭头标记

's'

正方形标记

'p'

五边形标记

'*'

星形标记

'h'

六边形标记 1

'H'

六边形标记 2

'+'

加号标记

'x'

X 标记

'D'

菱形标记

'd'

窄菱形标记

'&#124;'

竖直线标记

'_'

水平线标记

还定义了以下颜色缩写。

代码语言:javascript
复制
蓝色

要显示圆来代表点,而不是上面示例中的线,请使用ob作为plot()函数中的格式字符串。

示例

代码语言:javascript
复制
import numpy as np 
from matplotlib import pyplot as plt 

x = np.arange(1,11) 
y =  2  * x +  5 
plt.title("Matplotlib demo") 
plt.xlabel("x axis caption") 
plt.ylabel("y axis caption") 
plt.plot(x,y,"ob") 
plt.show()

上面的代码应该产生以下输出:

绘制正弦波

以下脚本使用 matplotlib 生成正弦波图。

示例

代码语言:javascript
复制
import numpy as np 
import matplotlib.pyplot as plt 
# 计算正弦曲线上点的 x 和 y 坐标
x = np.arange(0,  3  * np.pi,  0.1) 
y = np.sin(x)
plt.title("sine wave form")  
# 使用 matplotlib 来绘制点
plt.plot(x, y) 
plt.show()

subplot()

subplot()函数允许你在同一图中绘制不同的东西。在下面的脚本中,绘制正弦和余弦值。

示例

代码语言:javascript
复制
import numpy as np 
import matplotlib.pyplot as plt 
# 计算正弦和余弦曲线上的点的 x 和 y 坐标 
x = np.arange(0,  3  * np.pi,  0.1) 
y_sin = np.sin(x) 
y_cos = np.cos(x)  
# 建立 subplot 网格,高为 2,宽为 1  
# 激活第一个 subplot
plt.subplot(2,  1,  1)  
# 绘制第一个图像 
plt.plot(x, y_sin) 
plt.title('Sine')  
# 将第二个 subplot 激活,并绘制第二个图像
plt.subplot(2,  1,  2) 
plt.plot(x, y_cos) 
plt.title('Cosine')  
# 展示图像
plt.show()

上面的代码应该产生以下输出:

bar()

pyplot子模块提供bar()函数来生成条形图。以下示例生成两组xy数组的条形图。

示例

代码语言:javascript
复制
from matplotlib import pyplot as plt 
x =  [5,8,10] 
y =  [12,16,6] 
x2 =  [6,9,11] 
y2 =  [6,15,7] 
plt.bar(x, y, align =  'center') 
plt.bar(x2, y2, color =  'g', align =  'center') 
plt.title('Bar graph') 
plt.ylabel('Y axis') 
plt.xlabel('X axis') 
plt.show()

NumPy - 使用 Matplotlib 绘制直方图

NumPy 有一个numpy.histogram()函数,它是数据的频率分布的图形表示。水平尺寸相等的矩形对应于类间隔,称为bin,变量height对应于频率。

numpy.histogram()

numpy.histogram()函数将输入数组和bin作为两个参数。 bin数组中的连续元素用作每个bin的边界。

代码语言:javascript
复制
import numpy as np 

a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) ]
np.histogram(a,bins =  [0,20,40,60,80,100]) 
hist,bins = np.histogram(a,bins =  [0,20,40,60,80,100])  
print hist 
print bins

输出如下:

代码语言:javascript
复制
[3 4 5 2 1]
[0 20 40 60 80 100]

plt()

Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和bin数组的数组作为参数,并转换为直方图。

代码语言:javascript
复制
from matplotlib import pyplot as plt 
import numpy as np  

a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) 
plt.hist(a, bins =  [0,20,40,60,80,100]) 
plt.title("histogram") 
plt.show()

输出如下:

你看到的只是NumPy教程的冰山一角,因全部内容过多,完整教程可以在公众号后台回复NumPy直接获取。

PS:如果觉得分享内容有帮助,记得随手分享、点赞、在看~

< END >

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NumPy - 简介
    • NumPy 操作
      • NumPy – MatLab 的替代之一
        • 在线尝试
    • NumPy - 环境
    • NumPy - Ndarray 对象
      • 示例 1
        • 示例 2
          • 示例 3
            • 示例 4
            • NumPy - 数据类型
              • 数据类型对象 (dtype)
                • 示例 1
                  • 示例 2
                    • 示例 3
                      • 示例 4
                        • 示例 5
                          • 示例 6
                            • 示例 7
                              • 示例 8
                              • NumPy - 数组属性
                                • ndarray.shape
                                  • 示例 1
                                    • 示例 2
                                    • NumPy - 切片和索引
                                      • 示例 1
                                      • 输出如下:
                                        • 示例 2
                                        • 输出如下:
                                        • NumPy - 高级索引
                                          • 整数索引
                                            • 示例
                                            • 输出如下:
                                              • 布尔索引
                                                • 示例
                                                • NumPy - 广播
                                                  • 示例
                                                  • NumPy - 数组上的迭代
                                                    • 示例
                                                    • NumPy - 数组操作
                                                      • 修改形状
                                                        • numpy.reshape
                                                        • numpy.ndarray.flat
                                                        • numpy.ndarray.flatten
                                                        • numpy.ravel
                                                      • 翻转操作
                                                        • 数组分割
                                                          • 添加/删除元素
                                                          • NumPy - 位操作
                                                            • 示例
                                                            • NumPy - 字符串函数
                                                              • 示例
                                                              • NumPy - 算数函数
                                                                • 三角函数
                                                                  • 舍入函数
                                                                    • numpy.around()
                                                                • NumPy - 算数运算
                                                                  • 示例
                                                                  • NumPy - 统计函数
                                                                    • numpy.amin() 和 numpy.amax()
                                                                      • numpy.ptp()
                                                                        • numpy.percentile()
                                                                          • numpy.median()
                                                                            • numpy.mean()
                                                                              • numpy.average()
                                                                                • 标准差
                                                                                  • 方差
                                                                                  • NumPy - 排序、搜索和计数函数
                                                                                    • 示例
                                                                                    • NumPy - 线性代数
                                                                                      • 示例
                                                                                      • 输出如下:
                                                                                      • NumPy - Matplotlib
                                                                                        • 示例
                                                                                          • 示例
                                                                                            • 绘制正弦波
                                                                                              • 示例
                                                                                                • subplot()
                                                                                                  • 示例
                                                                                                    • bar()
                                                                                                      • 示例
                                                                                                      • NumPy - 使用 Matplotlib 绘制直方图
                                                                                                        • numpy.histogram()
                                                                                                          • plt()
                                                                                                          相关产品与服务
                                                                                                          容器服务
                                                                                                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                                                                                          领券
                                                                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档