前言
学无止境,无止境学。坚持每天学点编程知识,坚持每天写点小文章,坚持每天进步一点点。大家好,我是张大鹏,喜欢学习和分享,希望能够通过此公众号,将自己学到的东西分享给大家,和大家一起交流,一起成长,一起进步。
乾坤未定,你我皆是黑马。大鹏一日同风起,扶摇直上九万里。宝剑锋从磨砺出,梅花香自苦寒来。不积跬步,无以至千里,不积小流无以成江海。
如果有多余的时间,就坚持学习吧,小时候学习改变命运,长大了学习丰富内涵,老了学习带来宁静。活到老,学到老,我能行!
概述
今天要给大家分享的是Numpy的神奇索引。在之前的文章中,我们已经掌握了Numpy的索引和切片,Numpy的布尔索引,应该已经感受到了Numpy在处理数组方面的强大之处。
而今天的主角神奇索引,你学会以后,相信会更惊叹于Numpy是如此的“神奇”!
那么,什么是神奇索引呢?
神奇索引本质上就是“通过数组对Numpy数组进行索引”。
没有错,我们对Numpy数组进行索引的时候,可以传入一个元素的二维数组,表示取Numpy数组中的某几行,也可以传入两个元素的二维数组,表示取Numpy数组中的某几个元素。
通过以上的描述,你应该能够感觉到,神奇索引主要是用来操作二维数组的。
准备数据
我们主要准备一个简单的二维数组:
import numpy as np
arr = np.array([[1,1,1],[2,2,2],[3,3,3]])
arr
结果如下:
array([[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])
取数组某几行
比如,我们取数组的第1行和2行:
arr[[0,1]]
输出结果如下:
array([[1, 1, 1],
[2, 2, 2]])
比如我们去数组的第1行和第3行:
arr[[0,2]]
输出结果如下:
array([[1, 1, 1],
[3, 3, 3]])
神奇索引的优势
这里需要注意的是,虽然通过切片的方式我们也能够取出数组的某几行元素,但是切片是要遵循规律的。而申请索引不需要遵循规律,你想要去哪几行就填哪几行的索引就行。
神奇索引支持负数
神奇索引除了支持正常的整数索引以外,还支持负数索引,表示从后往前的第几行数据。
比如,我们取第一行数据和最后一行数据:
arr[[0,-1]]
输出结果如下:
array([[1, 1, 1],
[3, 3, 3]])
神奇索引取特定元素
之前已经介绍过,如果神奇索引传入的是两个元素的二维数组,则是取具体的元素,需要两个二维数组的元素个数相等。
比如,我们去第1行的第1个元素和最后一个行的最后一个元素:
import numpy as np
arr = np.arange(1,10).reshape((3,3))
arr[[0,-1],[0,-1]]
输出结果如下:
array([1, 9])
总结
领取专属 10元无门槛券
私享最新 技术干货