您的位置:首页 > 编程语言 > Python开发

教程|Python之Numpy ndarray 基本介绍 3

2018-09-26 15:42 661 查看

 

 

访问flyai.club,一键创建你的人工智能项目

 

教程|Python之Numpy ndarray 基本介绍 2

知识点8. 基本的索引和切片

NumPy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多。一维数组很简单。从表面上看,它们跟Python列表的功能差不多:

 

如上所示,当你将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传播到整个选区。跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。

作为例子,先创建一个arr的切片:

 

现在,当我修稿arr_slice中的值,变动也会体现在原始数组arr中:

 

如果你刚开始接触NumPy,可能会对此感到惊讶(尤其是当你曾经用过其他热衷于复制数组数据的编程语言)。由于NumPy的设计目的是处理大数据,所以你可以想象一下,假如NumPy坚持要将数据复制来复制去的话会产生何等的性能和内存问题。

注意:如果你想要得到的是ndarray切片的一份副本而非视图,就需要明确地进行复制操作,例如arr[5:8].copy()。

对于高维度数组,能做的事情更多。在一个二维数组中,各索引位置上的元素不再是标量而是一维数组:

 

因此,可以对各个元素进行递归访问,但这样需要做的事情有点多。你可以传入一个以逗号隔开的索引列表来选取单个元素。也就是说,下面两种方式是等价的:

 

在多维数组中,如果省略了后面的索引,则返回对象会是一个维度低一点的ndarray(它含有高一级维度上的所有数据)。因此,在2×2×3数组arr3d中:

 

arr3d[0]是一个2×3数组:

 

标量值和数组都可以被赋值给arr3d[0]:

 

相似的,arr3d[1,0]可以访问索引以(1,0)开头的那些值(以一维数组的形式返回):

 

虽然是用两步进行索引的,表达式是相同的:

 

知识点9. 切片索引

 

对于之前的二维数组arr2d,其切片方式稍显不同

 

可以看出,它是沿着第0轴(即第一个轴)切片的。也就是说,切片是沿着一个轴向选取元素的。表达式arr2d[:2]可以被认为是“选取arr2d的前两行”。

你可以一次传入多个切片,就像传入多个索引那样:

 

像这样进行切片时,只能得到相同维数的数组视图。通过将整数索引和切片混合,可以得到低维度的切片。

例如,我可以选取第二行的前两列:

 

相似的,还可以选择第三列的前两行:

 

注意,“只有冒号”表示选取整个轴,因此你可以像下面这样只对高维轴进行切片:

 

 

 

教程|Jupyter Notebook初级教程——迷死人的基础操作

教程|Jupyter Notebook基础教程——快捷键的使用

教程|Python之Numpy ndarray 基本介绍 1

教程|Python之Numpy ndarray 基本介绍 2

点击 了解更多 ,动手操作

— End —

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: