一维、二维、三维的数组如何索引?

  • 直接进行索引,切片
  • 对象[ : , : , : ] – 先行后列 (以逗号分开各个维度,第1组表示第1维的切片方式,第2组表示第2维的切片方式…)

一、基本索引及切片

1、一维数组索引及切片

import numpy as np# 一维数组索引及切片
ar = np.arange(20)
print('ar = ', ar)
print('ar[4] = ', ar[4])
print('ar[3:6] = ', ar[3:6])

打印结果:

ar =  [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
ar[4] =  4
ar[3:6] =  [3 4 5]

2、二维数组索引及切片

# 二维数组索引及切片
ar = np.array([[0, 1, 2, 3],[4, 5, 6, 7],[8, 9, 10, 11],[12, 13, 14, 15]])
print('ar = {0}; ar数组轴数 = {1}'.format(ar, ar.ndim))  # 4*4的数组
print('\nar[2] = {0}; ar[2]数组轴数 = {1}'.format(ar[2], ar[2].ndim))  # 切片为下一维度的一个元素,所以是一维数组
print('\nar[2][1] = {0}; ar[2][1]数组轴数 = {1}'.format(ar[2][1], ar[2][1].ndim))  # 二次索引,得到一维数组中的一个值
print('\nar[1:3] = {0}; ar[1:3]数组轴数 = {1}'.format(ar[1:3], ar[1:3].ndim))  # 切片为两个一维数组组成的二维数组
print('\nar[2, 2] = {0}; ar[2, 2]数组轴数 = {1}'.format(ar[2, 2], ar[2, 2].ndim))  # 切片数组中的第三行第三列 → 10
print('\nar[:2, 1:] = {0}; ar[:2, 1:]数组轴数 = {1}'.format(ar[:2, 1:], ar[:2, 1:].ndim))  # 切片数组中的1,2行、2,3,4列 → 二维数组

打印结果:

ar = [[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11][12 13 14 15]]; ar数组轴数 = 2ar[2] = [ 8  9 10 11]; ar[2]数组轴数 = 1ar[2][1] = 9; ar[2][1]数组轴数 = 0ar[1:3] = [[ 4  5  6  7][ 8  9 10 11]]; ar[1:3]数组轴数 = 2ar[2, 2] = 10; ar[2, 2]数组轴数 = 0ar[:2, 1:] = [[1 2 3][5 6 7]]; ar[:2, 1:]数组轴数 = 2

二维数组索引方式:

  • 举例:获取第一个股票的前3个交易日的涨跌幅数据
# 二维的数组,两个维度
stock_change[0, 0:3]

返回结果:

array([-0.03862668, -1.46128096, -0.75596237])

3、三维数组索引及切片

# **三维数组索引及切片
ar = np.array([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])print('ar = {0}; ar数组轴数 = {1}'.format(ar, ar.ndim))  # 2*2*2的数组
print('ar[0] = {0}; ar[0]数组轴数 = {1}'.format(ar[0], ar[0].ndim))  # 三维数组的下一个维度的第一个元素 → 一个二维数组
print('ar[0][0] = {0}; ar[0][0]数组轴数 = {1}'.format(ar[0][0], ar[0][0].ndim))  # 三维数组的下一个维度的第一个元素下的第一个元素 → 一个一维数组
print('ar[0][0][1] = {0}; ar[0][0][1]数组轴数 = {1}'.format(ar[0][0][1], ar[0][0][1].ndim))

打印结果:

ar = [[[0 1][2 3]][[4 5][6 7]]]; ar数组轴数 = 3
ar[0] = [[0 1][2 3]]; ar[0]数组轴数 = 2
ar[0][0] = [0 1]; ar[0][0]数组轴数 = 1
ar[0][0][1] = 1; ar[0][0][1]数组轴数 = 0
  • 三维数组索引方式:
# 三维
a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])
# 返回结果
array([[[ 1,  2,  3],[ 4,  5,  6]],[[12,  3, 34],[ 5,  6,  7]]])
# 索引、切片
>>> a1[0, 0, 1]   # 输出: 2

二、布尔型索引及切片

import numpy as npar = np.array([[0, 1, 2, 3],[4, 5, 6, 7],[8, 9, 10, 11]])# 布尔型索引:以布尔型的矩阵去做筛选
i = np.array([True, False, True])
j = np.array([True, True, False, False])
print('ar = ', ar)
print('\ni = ', i)
print('\nj = ', j)
print('\nar[i, :] = ', ar[i, :])  # 在第一维度做判断,只保留True,这里第一维度就是行,ar[i,:] = ar[i](简单书写格式)
print('\nar[:, j] = ', ar[:, j])  # 在第二维度做判断,这里如果ar[:,i]会有警告,因为i是3个元素,而ar在列上有4个
print('-' * 100)m = ar > 5
print('m = ', m)  # 这里m是一个判断矩阵
print('\nar[m] = ', ar[m])  # 用m判断矩阵去筛选ar数组中>5的元素 → 重点!后面的pandas判断方式原理就来自此处

打印结果:

ar =  [[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]i =  [ True False  True]j =  [ True  True False False]ar[i, :] =  [[ 0  1  2  3][ 8  9 10 11]]ar[:, j] =  [[0 1][4 5][8 9]]
----------------------------------------------------------------------------------------------------
m =  [[False False False False][False False  True  True][ True  True  True  True]]ar[m] =  [ 6  7  8  9 10 11]Process finished with exit code 0

三、数组索引及切片的值更改、复制

一个标量赋值给一个索引/切片时,会自动改变/传播原始数组

import numpy as np# 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组ar = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print('ar = ', ar)# 数组索引及切片的值更改、复制
ar[5] = 100
ar[7:9] = 200
print('ar = ', ar)
print('-' * 100)# 复制
ar = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b = ar.copy()
b[7:9] = 200
print('ar = ', ar)
print('b = ', b)

打印结果:

ar =  [0 1 2 3 4 5 6 7 8 9]
ar =  [  0   1   2   3   4 100   6 200 200   9]
----------------------------------------------------------------------------------------------------
ar =  [0 1 2 3 4 5 6 7 8 9]
b =  [  0   1   2   3   4   5   6 200 200   9]Process finished with exit code 0

NumPy(十):ndarray数组索引、切片相关推荐

  1. Python 数据分析三剑客之 NumPy(二):数组索引 / 切片 / 广播 / 拼接 / 分割

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  2. numpy 学习汇总33 - 索引切片( 初步学习 tcy)

    索引切片 2018/6/18 2018/11/26===================================================================== 1. 索引 ...

  3. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

  4. Numpy基础(part1)--ndarray数组

    鄙人学习笔记,这个笔记以例子为主. 开发工具:Spyder 文章目录 使用python做数据分析的常用库 numpy概述 ndarray数组 内存中的ndarray对象 ndarray数组对象的创建 ...

  5. python花式索引_初探Numpy中的花式索引

    Numpy中对数组索引的方式有很多(为了方便介绍文中的数组如不加特殊说明指的都是Numpy中的ndarry数组),比如:基本索引:通过单个整数值来索引数组 import numpy as np arr ...

  6. python 一维数组所有元素是否大于_利用Python进行数据分析(5) NumPy基础: ndarray索引和切片...

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  7. numpy的基本使用 附python代码详细讲解(numpy函数,创建数组,常用属性,索引切片,数组的复制,修改维度,数组的分割、拼接、转置)

    目录 使用array创建数组 使用arange创建数组 Numpy中的随机数创建 ndarray对象的常用属性 其他方式创建数组 索引和切片(一位数组.二维数组) 数组的复制 修改数组的维度 数组的拼 ...

  8. 玩转NumPy——NumPy数组的切片和索引

    NumPy数组可以基于 0 ~n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组. eg: import ...

  9. python三维数组切片_【NumPy学习指南】day4 多维数组的切片和索引

    ndarray支持在多维数组上的切片操作.为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下的维度. (1)举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组: ...

最新文章

  1. 学会使用Spring注解
  2. 计算机软件通常称为,计算机软件通常分为
  3. semaphore的使用
  4. mysql极客_极客mysql16
  5. 复杂指令集linux,精简指令集和复杂指令集区别
  6. 【AI视野·今日NLP 自然语言处理论文速览 第二十一期】Fri, 24 Sep 2021
  7. Java 算法 礼物分配
  8. 红豆、绿豆、黑豆、花生、莲子、薏仁米放在一起吃,可以吗?
  9. NP、NP-完全、NP-难问题
  10. 用注册表修改右键菜单
  11. 为了物尽其用报废的涉密计算机的硬盘,检测不到硬盘不能轻易将其定为报废
  12. wps小写金额转大写快捷键_WPS轻松办公—将数字转换中文大写的两种方法
  13. 830计算机软件综合大纲,2019年中国地质大学830计算机软件综合考试大纲.pdf
  14. STM32F4——FLASH闪存编程原理
  15. 智能设计课程v2.0 | DesignX 2021版
  16. 【Pygame实战】第三版本最终确认——《愤怒的小鸟梦幻爆破》上线回归,爆赞~
  17. STL容器之vector
  18. java arr转化为list
  19. 51nod1431 快乐排队
  20. 行走自由的扫地机器人,可能正在偷偷监听你

热门文章

  1. Simscape Multibody入门指南3-单摆模型
  2. PTN设备中为什么不支持PHP,ptn和otn的区别是什么
  3. JS项目开发中常用的一些小功能
  4. 中国反渗透膜清洗剂市场发展趋势与投资规划建议报告2022-2028年
  5. 深度学习经典和最新模型
  6. IOS捷径、微信技巧、玩机巧计交流群
  7. Android在如何建立一个WebServer
  8. android应用禁止投屏显示
  9. js+jq页面跳转方法
  10. 2006网易学院年度软件评选 - 网易学院