图解

您所在的位置:网站首页 numpy使用方法和功能 图解

图解

2022-06-05 04:55| 来源: 网络整理| 查看: 265

原标题:图解 | NumPy可视化指南

译者:AI研习社

双语原文链接:

NumPy是一个广泛适用的Python数据处理库,pandas, OpenCV等库都基于numpy。同时,在PyTorch、TensorFlow、Keras等深度许欸小框架中,了解numpy将显著提高数据共享和处理能力,甚至无需过多更改就可以在GPU运行计算。

n维数组是NumPy的核心概念,这样的好处,尽管一维和而为数组的处理方式有些差异,但多数不同维数组的操作是一样的。本文将对以下三个部分展开介绍:

向量——一维数组

矩阵——二维数组

3维及更高维数组

本文受JayAlammar的文章“ A Visual Intro to NumPy”的启发,并对其做了更详细丰富的介绍。

numpy数组 vs. Python列表

乍看上去,NumPy数组与Python列表极其相似。它们都用来装载数据,都能够快速添加或获取元素,插入和移除元素则比较慢。

当然相比python列表,numpy数组可以直接进行算术运算:

除此之外,numpy数组还具有以下特点:

更紧凑,高维时尤为明显

向量化后运算速度比列表更快

在末尾添加元素时不如列表高效

元素类型一般比较固定

其中,O(N)表示完成操作所需的时间与数组大小成正比,O(1)表示操作时间与数组大小无关。

1.向量与1维数组

向量初始化

通过Python列表可以创建NumPy数组,如下将列表元素转化为一维数组:

注意,确保列表元素类型相同,否则dtype=’object',将影响运算甚至产生语法错误。

由于在数组末尾没有预留空间以快速添加新元素,NumPy数组无法像Python列表那样增长,因此,通常的做法是在变长Python列表中准备好数据,然后将其转换为NumPy数组,或是使用np.zeros或np.empty预先分配必要的空间:

通过以下方法可以创建一个与某一变量形状一致的空数组:

不止是空数组,通过上述方法还可以将数组填充为特定值:

在NumPy中,还可以通过单调序列初始化数组:

如果您需要[0., 1., 2.]这样的浮点数组,可以更改arange输出的类型,即arange(3).astype(float),但有更好的方法:由于arange函数对类型敏感,因此参数为整数类型,它生成的也是整数类型,如果输入float类型arange(3.),则会生成浮点数。

arange浮点类型数据不是非常友好:

上图中,0.1对我们来说是一个有限的十进制数,但对计算机而言,它是一个二进制无穷小数,必须四舍五入为一个近似值。因此,将小数作为arange的步长可能导致一些错误。可以通过以下两种方式避免如上错误:一是使间隔末尾落入非整数步数,但这会降低可读性和可维护性;二是使用linspace,这样可以避免四舍五入的错误影响,并始终生成要求数量的元素。但使用linspace时尤其需要注意最后一个的数量参数设置,由于它计算点数量,而不是间隔数量,因此上图中数量参数是11,而不是10。

随机数组的生成如下:

向量索引

对于数组数据的访问,numpy提供了便捷的访问方式:

上图中,除“fancy indexing”外,其他所有索引方法本质上都是`views`:它们并不存储数据,如果原数组在被索引后发生更改,则会反映出原始数组中的更改。

上述所有这些方法都可以改变原始数组,即允许通过分配新值改变原数组的内容。这导致无法通过切片来复制数组:

此外,还可以通过布尔索引从NumPy数组中获取数据,这意味着可以使用各种逻辑运算符:

any和all与其他Python使用类似any和all与其他Python使用类似

注意,不可以使用`3



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3