likes
comments
collection
share

Numpy数据分析:数组索引详解

作者站长头像
站长
· 阅读数 2

前言

作为数据分析三巨头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]

Numpy数据分析:数组索引详解

甚至如果索引的形状并非符合原矩阵的形状,会根据索引矩阵自行变换:

j = np.array([[3, 4], [9, 7]])
a[j]

Numpy数据分析:数组索引详解

二、二维数组

 当索引数组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

Numpy数据分析:数组索引详解

我们还可以为多个维度提供索引。每个维度的索引数组必须具有相同的形状。

这个比较难理解,这样可以看个例子我们来理解:

a = np.arange(12).reshape(3, 4)
a

Numpy数据分析:数组索引详解

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]

Numpy数据分析:数组索引详解

我们这么理解,第一个矩阵索引为指定矩阵的y轴 ,第二个矩阵索引指定矩阵的x轴,比如这个[i,0],[0,0]就是第一个y轴然后第0个,也就是0,那么第二个就是[1,0]也就是4,这样组合就是[0,4]了。

所以a[l,2]就应该是2,6,6,10了:

Numpy数据分析:数组索引详解

那么如果在第二个系数转为矩阵就比较好理解:

a[i, j]

Numpy数据分析:数组索引详解

也是一样的规则按拼接索引对应来i和j合并成:[0,2],[1,1],[1,3].[2,3]->2,5,7,11.

这里注意还有一种方式:


a[:, j]

Numpy数据分析:数组索引详解

这种就是从第一行自动索引,那么前第一行[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]

Numpy数据分析:数组索引详解

然而,我们不能通过将i和j放入一个数组来实现这一点,因为这个数组将被解释为索引a的第一个维度。

Numpy数据分析:数组索引详解

三、索引赋值

可以根据列表索引一次赋予多值

a = np.arange(5)
a[[1, 3, 4]] = 0
a

但是,当索引列表包含重复项时,赋值会重复几次,留下最后一个值:

a = np.arange(5)
a[[0, 0, 2]] = [1, 2, 3]
a

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。