NumPy - 安装方法 基本介绍

NumPy 是一个 Python 包, 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库,Numpy 是 python 用于数据技术最通用的第三方库,其核心优势在于它提供了用于复杂数据对象处理的N维数组的对象类型,以及各类相关的函数和方法。

主要用途:

机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。

图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。

数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。

NumPy 前身

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

Numpy 核心对象类型是 Ndarray(N-dimension-array),即多维数组。使用 np.array 函数进行创建,根据该函数的规则,传入的参数必须是一个序列(list / tuple 等)。

NumPy 与 Matlab 比较

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

安装方法:

python -m pip install  numpy scipy matplotlib ipython jupyter pandas sympy nose -i https://pypi.douban.com/simple/

建议使用用户安装,将–user标志发送给pip。 pip为本地用户安装软件包,并且不写入系统目录。

NumPy - Ndarray 对象

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。ndarray 中的每个元素在内存中使用相同大小的块。 ndarray 中的每个元素是数据类型对象的对象(称为 dtype)。

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

数字信号处理python的源码 python数字信号处理库_python

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

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

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

数字信号处理python的源码 python数字信号处理库_人工智能_02


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

NumPy - 数据类型

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

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

序号

数据类型及描述

1.

bool_ 存储为一个字节的布尔值(真或假)

2.

int_ 默认整数,相当于 C 的long,通常为int32或int64

3.

intc 相当于 C 的int,通常为int32或int64

4.

intp 用于索引的整数,相当于 C 的size_t,通常为int32或int64

5.

int8 字节(-128 ~ 127)

6.

int16 16 位整数(-32768 ~ 32767)

7.

int32 32 位整数(-2147483648 ~ 2147483647)

8.

int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)

9.

uint8 8 位无符号整数(0 ~ 255)

10.

uint16 16 位无符号整数(0 ~ 65535)

11.

uint32 32 位无符号整数(0 ~ 4294967295)

12.

uint64 64 位无符号整数(0 ~ 18446744073709551615)

13.

float_ float64的简写

14.

float16 半精度浮点:符号位,5 位指数,10 位尾数

15.

float32 单精度浮点:符号位,8 位指数,23 位尾数

16.

float64 双精度浮点:符号位,11 位指数,52 位尾数

17.

complex_ complex128的简写

18.

complex64 复数,由两个 32 位浮点表示(实部和虚部)

19.

complex128 复数,由两个 64 位浮点表示(实部和虚部)

NumPy - 数组属性

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

import numpy as np 
a = np.array([[1,2,3],[4,5,6]])  
print a.shape # (2, 3)

使用 ndarray.shape 调整数组大小:

import numpy as np 
 
a = np.array([[1,2,3],[4,5,6]]) 
a.shape =  (3,2)  
print a.shape # (3,2)

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

import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2)  
print b.shape # (3,2)

ndarray.ndim:这一数组属性返回数组的维数。

import numpy as np 
a = np.arange(24) # 等间隔数字的数组  
print a # [0 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16 17 18 19 20 21 22 23]
print a.ndim # 1

numpy.itemsize:这一数组属性返回数组中每个元素的字节单位长度。

数组的 dtype 为 int8(一个字节)

import numpy as np
x = np.array([1, 2, 3, 4, 5], dtype=np.int8)
print(x.itemsize) # 1

数组的 dtype 为 float32(4个字节)

import numpy as np
x = np.array([1, 2, 3, 4, 5], dtype=np.float32)
print(x.itemsize) # 4

numpy.flags:ndarray 对象拥有以下属性。这个函数返回了它们的当前值。

数字信号处理python的源码 python数字信号处理库_机器学习_03

import numpy as np

x = np.array([1, 2, 3, 4, 5])
print(x.flags)

"""
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
"""

NumPy - 数组创建例程

新的 ndarray 对象可以通过任何下列数组创建例程或使用低级 ndarray 构造函数构造。

numpy.empty:它创建指定形状和 dtype 的未初始化数组。 它使用以下构造函数:

numpy.empty(shape, dtype = float, order = 'C')

构造器接受下列参数:

序号

参数及描述

1.

Shape 空数组的形状,整数或整数元组

2.

Dtype 所需的输出数组类型,可选

3.

Order 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组

import numpy as np

x = np.empty([3, 2], dtype=int)
print(x)
"""
[[         0          0]
 [         0 1071644672]
 [         0 1072693248]]
"""

numpy.zeros:返回特定大小,以 0 填充的新数组。

numpy.zeros(shape, dtype = float, order = 'C')

比如:含有 5 个 0 的数组,默认类型为 float

import numpy as np

x = np.zeros(5)
print(x)

numpy.ones:返回特定大小,以 1 填充的新数组。

numpy.ones(shape, dtype = None, order = 'C')

NumPy - 现有数据创建数组

numpy.asarray:此函数类似于 numpy.array,除了它有较少的参数。 这个例程对于将 Python 序列转换为 ndarray 非常有用。

构造器接受下列参数:

序号

参数及描述

1.

Shape 空数组的形状,整数或整数元组

2.

Dtype 所需的输出数组类型,可选

3.

Order 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组

下面的例子展示了如何使用 asarray 函数:

import numpy as np

x = [1, 2, 3]
a = np.asarray(x)
print(a)

numpy.frombuffer:此函数将缓冲区解释为一维数组。 暴露缓冲区接口的任何对象都用作参数来返回ndarray。

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)

构造器接受下列参数:

数字信号处理python的源码 python数字信号处理库_python_04


下面的例子展示了 frombuffer 函数的用法:

import numpy as np 
s =  'Hello World' 
a = np.frombuffer(s, dtype =  'S1')  
print(a)

# ['H'  'e'  'l'  'l'  'o'  ' '  'W'  'o'  'r'  'l'  'd']

numpy.fromiter:此函数从任何可迭代对象构建一个ndarray对象,返回一个新的一维数组。

numpy.fromiter(iterable, dtype, count = -1)

构造器接受下列参数:

数字信号处理python的源码 python数字信号处理库_机器学习_05


以下示例展示了如何使用内置的 range() 函数返回列表对象。 此列表的迭代器用于形成 ndarray 对象:

import numpy as np

list = range(5)
it = iter(list)
# 使用迭代器创建 ndarray
x = np.fromiter(it, dtype=float)
print(x)