开启生长之旅!这是我参与「日新方案 2 月更文应战」的第 5 天,点击检查活动概况
前语
作为数据剖析三巨头Pandas、matplotlib、NumPy之一,必然要给足体面单独拿出来解说一波。NumPy运用场景非常广泛,Pandas很多函数转化后也都是NumPy数组类型的数据结构。在机器学习、深度学习以及一些数据处理操作中运用的频率甚至比Pandas都高。而且NumPy功用强大,运用起来也非常便捷,支撑多种杂乱操作。平时我的Pandas以及一些机器学习的文章都有用到NumPy,可是博客内容并没有具体解答NumPy的操作也没有记录有关NumPy操作的一些具体函数解答。关于我这种寻求一站式服务需求的博主来说着实有点不当,故把旧坑补上,出一期全新的一文速学系列-Numpy数据剖析根底专栏。
此系列文章将被纳入我的专栏一文速学系列-NumPy数据剖析根底,根本覆盖到运用NumPy数据剖析日常事务以及惯例的数学建模剖析以及杂乱操作方方面面的问题。从根底的数组操作逐步入门到处理矩阵矢量特征等杂乱操作,以及专业的NumPy常用函数解说,我都将花费了很多时刻和心思创造,假如大家有需要从事数据剖析或许数据开发、数学建模、Python工程的朋友引荐订阅专栏,将在榜首时刻学习到最有用常用的常识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有过错或许疑问能够在谈论区指出,感谢大家的支撑。
本篇文章首要叙述关于Numpy高阶索引的运用和一些索引技巧。
NumPy供给了比惯例Python序列更多的索引功用。除了按整数和切片进行索引之外,正如咱们之前所看到的,数组还能够按整数数组和布尔数组进行索引。
一、数组索引
一、一维数组
numpy允许在数组索引里面做嵌套,也便是能够直接设定自己想要的逻辑获取索引了,例如:
import numpy as np
a = np.arange(12)**2
i = np.array([1, 1, 3, 8, 5])
a[i]
甚至假如索引的形状并非符合原矩阵的形状,会根据索引矩阵自行改换:
j = np.array([[3, 4], [9, 7]])
a[j]
二、二维数组
当索引数组a是多维的时,单个索引数组引用a的榜首个维度。下面的示例通过运用调色板将标签图画转化为彩色图画来显示此行为。
palette = np.array([[0, 0, 0], # black
[255, 0, 0], # red
[0, 255, 0], # green
[0, 0, 255], # blue
[255, 255, 255]]) # white
image = np.array([[0, 1, 2, 0], # each value corresponds to a color in the palette
[0, 3, 4, 0]])
palette[image] # the (2, 4, 3) color image
咱们还能够为多个维度供给索引。每个维度的索引数组必须具有相同的形状。
这个比较难了解,这样能够看个例子咱们来了解:
a = np.arange(12).reshape(3, 4)
a
i = np.array([[0, 1], # indices for the first dim of `a`
[1, 2]])
j = np.array([[2, 1], # indices for the second dim
[3, 3]])
a[i,0]
咱们这么了解,榜首个矩阵索引为指定矩阵的y轴 ,第二个矩阵索引指定矩阵的x轴,比方这个[i,0],[0,0]便是榜首个y轴然后第0个,也便是0,那么第二个便是[1,0]也便是4,这样组合便是[0,4]了。
所以a[l,2]就应该是2,6,6,10了:
那么假如在第二个系数转为矩阵就比较好了解:
a[i, j]
也是一样的规则按拼接索引对应来i和j合并成:[0,2],[1,1],[1,3].[2,3]->2,5,7,11.
这里留意还有一种方式:
a[:, j]
这种便是从榜首行主动索引,那么前榜首行[0,1,2,3]开始找[2,1],[3,3]便是[2,1],[3,3]了。
在Python中,arr[i,j]与arr[(i,j)]完全相同,因此咱们能够将i和j放在一个元组中,然后用它进行索引。
l = (i, j)
a[l]
但是,咱们不能通过将i和j放入一个数组来完成这一点,因为这个数组将被解释为索引a的榜首个维度。
三、索引赋值
能够根据列表索引一次赋予多值
a = np.arange(5)
a[[1, 3, 4]] = 0
a
可是,当索引列表包括重复项时,赋值会重复几次,留下最后一个值:
a = np.arange(5)
a[[0, 0, 2]] = [1, 2, 3]
a
点关注,防走丢,如有疏忽之处,请留言指教,非常感谢
以上便是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,咱们下期见。