好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

为什么要学NumPy?

从这一篇开始我们将陆续介绍Python中有关数据分析的知识。

目录

1. 为什么要学NumPy2. ndarray数组对象2.1 ndarray数组与Python原生数组的区别2.2 ndarray数组与matrix的区别

1. 为什么要学NumPy

NumPy是Python中用于高性能科学计算和数据分析的库。NumPy中提供了大量的库函数和操作,可以帮助人们轻松地进行数值计算。先用以下例子来说明。

如果我们想计算数组 A 的平方与数组 B 的立方之和,即 A^2 + B^3 。如果采用Python原生数组来实现,就不得不采用循环的方式:

 1def py_sum(): 2    A = [2, 3, 5, 10, 9] 3    B = [1, 7, 6, 4, 2] 4    C = [] 5    for i in range(len(A)): 6        C.append(A[i]**2 + B[i]**3) 7    return C 8 9py_sum()  

而如果采用NumPy,则非常简单:

 1import numpy as np 2 3def np_sum(): 4    A = np.array([2, 3, 5, 10, 9]) 5    B = np.array([1, 7, 6, 4, 2]) 6    return A**2 + B**3 7 8np_sum()  

在上面使用NumPy进行求和的例子中,我们使用 numpy 模块中的 array() 函数构建了一个 ndarray 数组对象——它是NumPy包的核心。 ndarray 数组对象配备了大量的函数和运算符,因此可以快速地进行乘方、求和等运算。

正是因为NumPy提供的 ndarray 数组对象以及用于快速操作数组的函数和API,它才广泛地应用于数据分析和科学计算的领域,比如:

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

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

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

2. ndarray数组对象

2.1 ndarray数组与Python原生数组的区别

ndarray 数组封装了python原生的同数据类型的n维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。 NumPy数组 和 标准Python Array(数组) 之间有几个重要的区别:

NumPy数组在创建时具有固定的大小 ,与Python的原生数组对象(可以动态增长)不同。 更改ndarray的大小将创建一个新数组并删除原来的数组。

NumPy数组中的元素都需要具有相同的数据类型 ,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。 NumPy数组有助于对大量数据进行高级数学和其他类型的操作。 通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。

越来越多的基于Python的科学和数学软件包使用NumPy数组; 虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前会还是会将输入的数组转换为NumPy的数组,而且也通常输出为NumPy数组。

换句话说,为了高效地使用当今科学/数学基于Python的工具(大部分的科学计算工具),你只知道如何使用Python的原生数组类型是不够的——还需要知道如何使用NumPy数组。

2.2 ndarray数组与matrix的区别

除了 ndarray 之外,NumPy还提供了另一种的矩阵类型 matrix 对象。

通常, ndarray 类旨在成为用于多种数值计算的通用n维数组,而 matrix  类则专门用于线性代数计算。实际上,两者之间只有少数几个关键区别。

维数

数组的维数可以使1,2,3,…

矩阵的维数只能是2维

矢量处理(一维数组)

对于数组,向量形状1xN,Nx1和N都是不同的东西。像A [:,1]这样的操作返回形状N的一维数组,而不是形状Nx1的二维数组。一维数组上的转置不起任何作用。

对于矩阵,一维数组总是向上转换为1xN或Nx1矩阵(行或列向量)。A [:,1] 返回形状为Nx1的二维矩阵。

操作符 * , dot , multiply()

对于数组, * 表示逐元素乘法,而  dot()  函数用于矩阵乘法。

对于矩阵,  *  表示矩阵乘法,而 multiply() 函数用于逐元素乘法。

构造方法

数组构造函数为: array([1,2,3], [4,5,6])

矩阵构造函数为: matrix("[1 2 3; 4 5 6]")

一些属性

ndarray 有一个 .T 属性,它返回数据的转置。

矩阵还具有 .H , .I 和 .A 属性,分别返回矩阵的共轭转置,逆矩阵和 asarray() 。

查看更多关于为什么要学NumPy?的详细内容...

  阅读:41次