numpy数组—矢量运算与索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jakob_Hu/article/details/88890813

数组运算

数组的运算涉及到矢量化的概念,矢量化是值不需要编写循环就可以对数据进行批量运算。以下是几种不同类别的数组运算。

1)相同形状的数组之间运算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
形状相同的数组之间的运算都是元素级的。

2)数组与标量之间运算

在这里插入图片描述
在这里插入图片描述
元素与标量之间的运算会传播到各个元素

3)不同形状数组之间的运算

形状不同的数组之间的运算叫广播。会在以后详细介绍。

数组索引和切片

1)数组的索引

一维数组

一维数组的索引与Python的列表时几乎相同的,
在这里插入图片描述
数组的修改是在源数据上进行的修改,不会开辟形成新的对象。
在这里插入图片描述
上面代码中 arr[ 5:8 ]的代码已经被蓝色圆角框画出,即使是切片这种操作,对切片的值进行的修改也会反映在原数组上。因为切片得到的是视图,不是副本。如果想得到副本,需要进行显示的复制,使用的是 copy方法

arr[5:8].copy()

多维数组

对于多维数组而言,各元素的索引不再是一个标量,而是一维数组。有几个维度,元素的角标对应的数组就有几个元素。
二维数组例子,
在这里插入图片描述
在这里插入图片描述
三维数组例子,
在这里插入图片描述
在这里插入图片描述

2)切片索引

一维数组

一维数组的切片在之前已经演示,与Python列表的切片使用形式相同,得到的是视图,而不是副本。

多维数组

多维数组的切片是在多个轴上进行的,轴和维度表达的是一个意思,维度是在外界看数组时候的描述,而轴是在数组内部看数组时候的描述。
在这里插入图片描述
arr2d是 3×3 的数组,从内部看是2个轴,从第一个轴开始到最后一个轴(本例是第二个轴),每个轴的元素数目为 3和3。
在这里插入图片描述
在这里插入图片描述

3)布尔型索引

创建一个7个名字构成的数组,
在这里插入图片描述
在这里插入图片描述
通过一个条件判断,将该条件作用到数组中的各个元素,返回的是一个布尔型的数组,此时在创建一个随机数组,
在这里插入图片描述
创建一个 7×4的数组,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
布尔型数组是能够做索引的,
在这里插入图片描述
将 name=="Bob"得到的布尔型数组用于得到7行中为true的那几行,但是前提条件是布尔型数组的长度与被索引数组的轴长度一致。

除了 “=”,其他的运算符号如"!="、" | “、<、>等都能作为判断条件,
在这里插入图片描述
在这里插入图片描述
这里演示使用的是”|“和”&"原因是 and 和 or 关键字在numpy的数组中不能使用

**通过布尔类型设置值也是经常用到的手段,比如讲数组中所有的小于0的数都视为0,
在这里插入图片描述
在这里插入图片描述
经过这样的处理,之前data数组中小于0的值都被设置的0所代替。

4)花式索引

花式索引是指利用整数数组进行索引。首先创建一个多维数组,
在这里插入图片描述
按照特定的顺序选取行子集(axis=0),
在这里插入图片描述
分别取到了索引为 4、3、0和6的行。如果传入的是负数,代表着从最后一行开始选取,
在这里插入图片描述
取出倒数第三、倒数第五和倒数第七行的数据。

上面的例子传入的都是一个一维数组,如果传入多个一维数组,所代表的意思有所不同。再创建一个新的数组,
在这里插入图片描述
上面的代码可以用Python中的 zip函数进行解释,

zip([1,5,7,2],[0,3,1,2])
# 返回 [(1,0), (5,3), (7,1), (2,2)]

运用到数组中的意思是,多维数组中依次取出角标为(1,0)、(5,3)、(7,1)和(2,2)开头的元素,由于本例中是二维数组,一维角标最多是两个元素,所以正好取出的是相应的值,如果是更高维度的数组,返回的应该是另一个数组。

有一点需要注意的是:花式索引产生的不是视图,是副本

猜你喜欢

转载自blog.csdn.net/Jakob_Hu/article/details/88890813
今日推荐