数据科学三分天下,Python占其一。Python数据科学 NumPy是基础,不管pandas还是tensorflow, NumPy都是基础库,学习NumPy基础类型和操作必不可少。本文我们就介绍NumPy基础,并以图形方式展现,以方便初学者理解。
概述
NumPy中最基本数据类型是数组,所有数据组织都是n维数组形式组织的。其中一维和二维数组是基础,其他多维数组的操作和其类似。
NumPy数组形式上和Python列表相似。两者都可以用作数据容器,可以快速访问和设置项目,但是数据插入和移动比较慢。
NumPy数组支持对其进行简单算术运算:
NumPy数组还具有:
比较紧凑,尤其是在一个以上的维度上;
可以向量化操作时比列表快;
将元素追加到末尾比列表慢(O(1)和O(N));
通常是同质的:只能快速处理一种类型的元素;
注意:O(N)表示完成操作所需的时间与数组的大小成正比,以及O(1),表示消耗时间固定和数组的大小无关。
向量——一维数组
向量初始化:创建NumPy数组的一种方法通过Python列表转换。数组类型会从列表元素类型中自动推导:
确保输入为同类型列表,否则其类型dtype='object',不仅转换耗时,而且只保留NumPy中包含的语法糖。
NumPy数组无法像Python列表那样增长:在数组末尾没有保留空间以方便快速追加。
一种常见的做法要么长出一个Python列表,并将其转换为NumPy的数组时,它已准备就绪或预分配必要的空间,可以用np.zeros和np.empty。
通常可以使用zeros_like()函数创建一个空数组,以大小和元素类型匹配现有数组:
创建以常量值填充的数组的函数都有一个对应的的_like函数:
在NumPy中,对有序数组有两个初始化函数:argnge()和lispace()
如果需要类似的浮点数组,例如[0., 1., 2.],可以修改arange输出的类型:arange(3).astype(float)。arange函数对类型敏感:如果将int作为参数输入,它将生成int,并且如果输入float(例如arange(3.)),则将生成float。
但是arange在处理浮点数方面并不是特别擅长:
0.1对于我们来说,这看起来像是一个有限的十进制数,但对计算机而言却不是:用二进制表示,它是一个无穷小数,必须四舍五入到精度需求的位数。所以给arange赋值为小数通常会有问题:会抛出一个错误。可以使间隔的非整数步数,但这会降低可读性和可维护性。
而linspace不受舍入错误的影响,它始终生成要求的元素数量。不过,需要注意的的是它计算的是点,而不是间隔,因此最后一个参数始终,通常认为是加一。因此结果11,而不是上面示例中的10。
在数值计算中,通常需要生成随机数组:
向量索引
一旦将数据保存在了数组中,就可以使用NumPy数组索引对其进行操作。
除花式索引外,以上介绍的所有索引方法实际上都是所谓的"视图":如果索引的值做操作发生更改,则它们不会影响原始数