当前位置: 首页 > 后端技术 > Python

GraphicalNumpy,这篇文章真的给力!

时间:2023-03-26 15:50:04 Python

今天为大家准备了Numpy的图文教程。本文以直观的方式介绍了NumPy的功能和使用示例。NumPy包是Python生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵运算的处理。Python的一些主要软件包,如scikit-learn、SciPy、pandas和tensorflow,使用NumPy作为其架构的基础部分。除了能够对数值数据进行切片和切块之外,使用NumPy还为操作和调试上述库中的高级示例提供了极大的便利。本文将介绍使用NumPy的一些主要方法,以及它如何在将数据输入机器学习模型之前表示不同类型的数据(表格、图像、文本等)。importnumpyasnpcreatesarrays我们可以通过传递python列表并使用np.array()创建NumPy数组(很可能是多维数组)。本例中python创建的数组如下图右侧所示:通常我们希望NumPy初始化数组的值,为此NumPy提供了ones()、zeros()、random等方法。随机的()。我们只需传递我们希望NumPy生成的元素数量:创建数组后,我们可以随意操作它们。数组操作让我们创建两个NumPy数组来演示数组操作能力。我们将下图中的两个数组分别称为data和ones按位置相加(即每一行对应相加),直接输入data+ones即可:开始学习这些工具的时候,发现这样的抽象节省了我不必在循环中编写类似的计算。这样的抽象让我可以在更高的层次上思考。除了“加法”之外,我们还可以进行以下操作:通常,我们希望进行数组与单个数之间的运算(即向量与标量之间的运算)。假设我们有一个以英里为单位表示距离的数组,我们想将它们的单位转换为千米。Justenterdata*1.6:看看NumPy是怎么理解这个操作的?这个概念叫做广播,它非常有用。索引我们可以像切片python列表一样对NumPy数组进行任意索引和切片:聚合NumPy还提供了聚合函数:除了min、max和sum之外,还可以使用mean来获取平均值,使用prod获取所有元素的乘积,使用std获取标准偏差等。更多维度上面的例子都是处理一维向量的。NumPy之美的关键在于它能够将上述所有方法应用于任意数量的维度。创建矩阵我们可以传递一个如下形状的python列表,让NumPy创建一个矩阵来表示它:np.array([[1,2],[3,4]])我们也可以使用上面提到的方法(ones(),zeros(),andrandom.random()),只需写一个元组来描述我们创建的矩阵的维度:矩阵运算如果两个矩阵大小相同,我们可以使用算术运算符(+-*/)添加和乘以矩阵。NumPy将它们视为位置运算:我们也可以对两个不同大小的矩阵执行此类算术运算,但前提是其中一个维度为1(例如,矩阵只有一列或一行),在这种情况下,NumPy执行使用广播规则的算术运算:点积算术和矩阵运算之间的一个主要区别是矩阵乘法使用点积。NumPy给每个矩阵一个dot()方法,我们可以用它来与其他矩阵进行点乘:我在上图右下角添加了矩阵维数,强调这两个矩阵的相邻边必须具有相同的维数.您可以将上述操作视为:矩阵索引索引和切片操作在我们处理矩阵时变得更加有用:矩阵聚合我们可以像聚合向量一样聚合矩阵:我们不仅可以聚合所有值在一个矩阵,也可以使用轴参数执行跨行或列的聚合:转置和重塑矩阵时的一个常见需求是旋转矩阵。当您需要执行两个矩阵的点积并??对齐它们的共享维度时,通常需要转置。NumPy数组有一个方便的方法T来查找矩阵转置:在更高级的实例中,您可能需要转换特定矩阵的维度。在机器学习应用程序中,模型经常需要与数据集不同的输入形状。在这些情况下,NumPy的reshape()方法可以发挥作用。只需为其分配矩阵所需的新维度即可。您可以将-1分配给一个维度,NumPy可以从您的矩阵中推断出正确的维度:NumPy可以在任何维度上执行上述所有操作。它的中心数据结构被称为ndarray(N维数组)并非毫无意义。在许多情况下,处理一个新维度只是在NumPy函数的参数中添加一个逗号:实际使用这里是一个实际示例,演示了可以使用NumPy实现的有用功能。公式实现可用于矩阵和向量的数学公式是NumPy的一个关键用例。这就是为什么NumPy是Python社区的宠儿。例如,均方误差公式,它是用于回归问题的监督式机器学习模型的核心:一个值或一千个值(只要它们大小相同)。我们可以举个例子依次执行上面这行代码中的四个操作:预测向量和标签向量都包含三个值,即n的值为3。相减后得到的值为:然后对向量求平方得到:现在对值求和:结果是该预测的误差值和模型质量得分。数据表示考虑所有需要处理和建模的数据类型(电子表格、图像、音频等),其中许多适合用n维数组表示:表格和电子表格电子表格或值表是一个二维矩阵。电子表格中的每个工作表都可以是它自己的变量。python中最流行的抽象是pandas数据框,它实际上使用NumPy并构建在它之上。音频和时间序列音频文件是样本的一维数组。每个样本都是一个数字,代表音频信号的一小部分。CD质量的音频每秒包含44,100个样本,每个样本是一个介于-65535和65536之间的整数。这意味着如果你有一个10秒的CD质量的WAVE文件,你可以将它加载到一个长度为10*的NumPy数组中44,100=441,000。如果要提取音频的第一秒,只需将文件加载到音频NumPy数组中并获取audio[:44100]。这是一个音频文件:时间序列数据也是如此(例如股票价格随时间的变化)。图像图像是大小为(高x宽)的像素矩阵。如果图像是黑白的(即灰度),每个像素可以用一个数字表示(通常在0(黑色)和255(白色)之间)。想要从图像的左上角裁剪10x10像素?只需在NumPy中编写即可。下图是一个图像文件的片段:如果图像是彩色的,每个像素由三个数字表示——红色、绿色和蓝色。在这种情况下,我们需要一个三维数组(因为每个单元格只能包含一个数字)。因此彩色图像由大小为(高x宽x3)的ndarray表示:Language如果我们处理文本,情况就不同了。文本的数字表示需要一个词汇构建步骤(模型知道的唯一单词列表)和一个嵌入步骤。让我们看一下用数字表示以下文本的步骤:在用数字表示诗人的话语之前,模型需要查看大量文本。我们可以让它与一个小数据集一起工作,并用它来构建一个词汇表(71,290个单词):句子可以分成一组标记(基于通用规则的单词或单词的一部分):然后我们使用词汇表用以下ID替换每个单词:这些ID仍然没有为模型提供太多信息价值。因此,在将这组词输入模型之前,我们需要用嵌入(在本例中为50维word2vec嵌入)替换标记/词:如您所见,此NumPy数组的维度为[embedding_dimensionxsequence_length]。出于性能原因,深度学习模型倾向于保留批量大小的第一个维度(因为如果并行训练许多示例,模型训练速度会加快)。在这种情况下,reshape()变得非常有用。例如,像BERT这样的模型需要以下形式的输入:[batch_size,sequence_length,embedding_size]。现在这是模型可以处理并采取相应行动的数字量的形式。其他行留空,但它们填充了供模型训练(或预测)的其他示例。以上就是本次分享的全部内容。想了解更多Python知识,请前往公众号:Python编程学习圈,每日干货分享,发送*“J”*也可领取大量学习资料。