numpy数组操作汇总 :索引,切片,广播及其他

一. 索引

1. 普通索引

① 一维数组索引

② 二维数组索引

③ 三维数组索引

2. 布尔索引

筛选时,True所对应的位置为所选,False则淘汰。

3. 花式索引

指的是利用整数数组(或列表)进行索引。

 

当一次传入多个索引数组,会返回一个一维数组,其中的元素对应各个索引元组。如下,

数组b[[1, 2, 3], [4, 5, 6]]经索引[[0, 1, 1], [0, 1,  2]], 返回了一维数组[1, 5 ,6]。其中元素1对应坐标(0, 0), 元素5对应坐标(1, 1), 元素6对应坐标(1, 2)。

也就是说传入两个索引数组,相当于传入了一组平面坐标,从而进行了定位。

③ 传入多个索引数组(要使用np.ix_)

 

二 .切片

切片具体可见我另一篇 https://blog.csdn.net/qq_39938666/article/details/116131310

Numpy中的切片代表原数组一段区间的引用,而不是拷贝,也就是说我们修改切片中的内容是会影响原数组的。因为Numpy是为了大数据计算而诞生的,大数据计算显然性能是一个非常重要的考量指标。如果这里不是设计成引用,而是拷贝的话,那么当一个大的切片产生的时候,必然会涉及到大量拷贝的操作。不仅非常消耗内存,并且也会占用大量计算资源。如果使用引用可以非常快速地返回结果。

那问题来了,如果我们想要拷贝出一份切片出来,而不是获得一个切片应该怎么办?答案也很简单,我们可以调用copy方法,获取一份拷贝。如

 

1. 一维数组切片

2. 二维数组切片

3. 三维数组切片

 

三. 广播

在Numpy计算当中,广播指的是将一个小的数据应用在大数据的计算上。比如我们想要对Numpy中的数组每一位的元素都加上3,我们当然可以创造出一个同样大小的数组来,然后再把它们相加。但是大可不必这么麻烦,我们直接用原数组加上3即可,Numpy内部会发现3和我们的数据大小不一致,然后自动帮我们把3拓充到和我们的数据一样大小的数组再进行计算

它其实等价于:

广播并不是只可以用在数组和一个整数之间,还可以用在数组和另外一个规模更小的数组当中,但是会对两者的shape有所要求。Numpy规定,两个数组的shape必须相等或者其中一个为1才可以执行广播操作。

比如创建一个arr数组的shape是(2, 3),则可让它和一个大小是(2, 1)或者是(1, 3)的“小数组”进行运算,这同样是支持的。

例1

 

四. 其他操作

1.  numpy.transpose()

2.  numpy.rollaxis()

同理:

3. numpy.swapaxes()

同样可以从元素所在坐标的角度去理解,比如a的元素1,原坐标是(0,0,1),经过a.swapaxes(2, 1)转换后的坐标是(0,1,0),如上图。

4. numpy.broadcast_to()

5. numpy.expand_dims()

5. numpy.squeeze()

6. numpy.concatenate()

7. numpy.stack()

例1

例2

例3

8. numpy.hstack(), numpy.vstack()

9. numpy.split()

10.  numpy.resize()

11. numpy.append()

12. numpy.insert()

 

13. numpy.delete()

14. numpy.unique()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值