数组索引是指使用方括号([])来索引数组值。索引有很多选项,这给NumPy提供了强大的索引功能,但是强大的功能也带来了一些复杂性和潜在的混乱。
单个元素的索引
一维数组的单元素索引是我们所期望的,它的工作方式与其他标准Python序列完全相同。它基于0,并且接受复索引以数组末尾开始索引。
与列表和元组不同,numpy数组支持多维数组的多维索引。这意味着不必将每个维度的索引都分成自己的一组方括号。
这里我们要注意,如果索引一个多维数组的索引比维数少,则将获得一个多维数组。例如:
也就是说,指定的每个索引都会选择与所选维度的其余部分相对应的数组。在上面的示例中,选择0表示长度5的剩余维未指定,返回的是该维和大小的数组。必须注意,返回的数组不是原始数组的副本,而是指向内存中与原始数组相同的值。在这种情况下,将返回第一个位置(0)的一维数组。因此,在返回的数组上使用单个索引会导致返回单个元素。例如:
因此请注意,尽管第二种情况的效率较低,因为在第一个索引之后创建了一个新的临时数组,随后将其索引为2。(x[0,2]=x[0][2])
我们要注意那些用于IDL或Fortran内存顺序的索引,因为它们与索引有关。NumPy使用C顺序索引。这意味着最后一个索引通常代表变化最快的内存位置,这与Fortran或IDL不同,在Fortran或IDL中,第一个索引代表内存中变化最快的位置。这种差异代表了很大的混淆可能性。
其它索引选项
可以对数组进行切片和步进以提取相同数量的维,但数组大小与原始数组不同。切片和步进的工作方式与列表和元组完全相同,只是它们也可以应用于多个维度。例如:
数组切片不会复制内部数组数据,只会生成原始数据的新视图。这与列表或元组切片不同,copy()如果不再需要原始数据,则建议使用显示切片。
为了从数组中选择值列表到新数组中,可以将数组与其他数组索引。有两种不同的方法可以实现这一点:其一是使用一个或多个索引值数组,其二是给出一个正