numpy.array多维数组的切片操作总结

2023-11-01

一 常规介绍

1 一维数组切片

一维数组类似于一条直线(一维),其上的坐标位置用一个数字就可表示,一个数字代表一个位置,对应一个值。

>>> b=np.random.randint(1,10,[10])
>>> b
array([6, 5, 2, 3, 9, 9, 3, 8, 5, 8])

# 正向第i个元素到第j个元素:
>>> i=1
>>> j=8
>>> b[i:j]
array([5, 2, 3, 9, 9, 3, 8])

# 返回b[i],b[i+1],···,b[j-1]的元素
>>> i=1
>>> j=2
>>> b[i:j]
array([5])

# 左闭右开,第j个元素不返回。
>>> b[::2]
array([6, 2, 9, 3, 5])

# 反向 倒数几个元素: 
# start和end为负数则是反向取元素, 
# 取b[start+1] ,b[start+2],···,b[end]的元素
>>> b[-3:-1]
array([8, 5])

2 二维数组的切片

二维数组类似于一个平面(二维),其上的坐标位置要用两个数字来表示,两个数字代表一个位置,对应一个值。

>>> a=np.random.randint(0,10,size=[4,5])
>>> a
array([[1, 8, 4, 9, 8],
       [4, 1, 6, 4, 2],
       [6, 4, 1, 2, 7],
       [4, 9, 3, 5, 9]])

# 取 第i行到第j行:
>>> a[2:4,:]
array([[6, 4, 1, 2, 7],
       [4, 9, 3, 5, 9]])
# 第i列到第j列:
>>> a[:,2:4]
array([[4, 9],
       [6, 4],
       [1, 2],
       [3, 5]])

多维的切片是在中括号中用逗号运算符, 将不同维上的操作分开,分割开后每个维度上单独维护即可。

3 维数超过 3 的多维数组,可通过 ‘…’ 来简化操作

# coding: utf-8
import numpy as np
 
arr = np.arange(24).reshape((2, 3, 4))
 
print arr[1, ...]               # 等价于 arr[1, :, :]
print arr[..., 1]               # 等价于 arr[:, :, 1]

4 numpy中对切片元素的操作会影响原数组本身

>>> a[:1,:1]=[[100]]
>>> a
array([[100,   8,   4,   9,   8],
       [  4,   1,   6,   4,   2],
       [  6,   4,   1,   2,   7],
       [  4,   9,   3,   5,   9]])

5 array和list的对比

访问多维数组的一个特定位置的元素

# array的用法
import numpy as np

arr = np.array([
    [1, 2, 3, 4],
    [2, 4, 6, 8],
    [3, 6, 9, 12],
    [4, 8, 12, 16]
])
print('第二行第二列的值:', arr[1, 1])

# list的用法
# coding: utf-8
arr = [
    [1, 2, 3, 4],
    [2, 4, 6, 8],
    [3, 6, 9, 12],
    [4, 8, 12, 16]
]
print('第二行第二列的值:', arr[1][1])

list的用法array也可以那样用,对于array来说,arr[1][1]就是先取出arr的第一行,然后再取arr的第一行的第一个。对于array来说,arr[index]——括号中的索引值只有一个的话,只能表示对array的第一个维度进行索引;arr[index][index]——表示先取出arr的第一个维度的index,再取出arr[index]的index。

如果只是二维数组,这种差别可能看起来并不大,但想象一下假如有一个 10 维的数组,用 Python 的标准做法需要写 10 对中括号,而用 Numpy 依然只需要一对。

6 boolean/mask index

用一个由 boolean 类型值组成的数组来选择元素的方法。如果要取其中 值大于 5 的元素,就可以用上 boolean index 了.

import numpy as np
 
arr = np.array([[1, 2, 3, 4],
                [2, 4, 6, 8],
                [3, 6, 9, 12],
                [4, 8, 12, 16]])
mask = arr > 5
 
print('boolean mask is:')
print(mask)
print(arr[mask])

在这里插入图片描述

二 多维数组array[index,index]和array[index][index]的区别

首先明确:array索引的标准用法是array[index,index]

import numpy as np
a=np.random.randint(0,10,size=[4,5])
a
a[:][0]
a[:,0]

在这里插入图片描述
对于多维数组(超过2),如果索引值只有一个数字,表示一个维度,那就表示对该多维数组的第一个维度进行索引。

import numpy as np
a = np.random.rand(2,2,2,2)
a

在这里插入图片描述
在这里插入图片描述
对于多维数组(超过2),如果索引值有多个数字,表示多个维度,那就表示对该多维数组的对应位置顺序的多个维度同时进行索引。
在这里插入图片描述
以上看不出两者的区别,看下面的示例。
在这里插入图片描述
显然,上面的示例中,a[:][0]表示先取出a数组的所有行,再取出其中的第0行。而a[:,0]表示取出a数组的所有行和第0列。

再看下面的例子
在这里插入图片描述
上面的例子表示对多维数组的最后一个维度进行循环。而下面的例子表示对多维数组的第一个维度进行循环。因为a[:][:][:][c]的前面a[:][:][:]只能表示取出a的所有行,最后a[:][:][:][c]的c才能表示取出a的第一个维度中的第c个。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

numpy.array多维数组的切片操作总结 的相关文章

  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • 制作双击可以直接运行的jar包

    原文地址 http www cnblogs com ylawrence3 archive 2009 11 08 1350645 html 1 JAR 文件包 JAR 文件就是 Java Archive File 顾名思意 它的应用是与 Ja
  • Android中启动一个服务,Android服务的两种启动方式

    前言 Service是Android的四大组件之一 也是可执行的程序 服务是Android中实现程序后台运行的解决方案 非常适合去执行那些不需要和用户交互而且还要求长期运行的任务 Service的启动方式有两种 总结一下两种方式的区别 一
  • Leetcode 14 string::find / substr

    思想 利用C string find 函数的特性 暴力匹配 重要特性 substr start length 如果 length 为 0 或负数 将返回一个空字符串 string find str 匹配返回首下标 不匹配返回string n
  • Idea Sonar使用说明

    1 Sonarlint安装 1 1 Idea在线安装 1 打开idea file 文件 setting 设置 1 插件搜索sonarlint进行安装 1 2 Idea离线安装 若idea 无法下载安装该插件 在idea https plug
  • opencv(十三)--边缘检测和梯度

    目标 图像梯度 图像边界等 使用到的函数有 cv2 Sobel cv2 Schar cv2 Laplacian 等 原理 梯度简单来说就是求导 OpenCV 提供了三种不同的梯度滤波器 或者说高通滤波器 Sobel Scharr 和Lapl
  • Qt 之 QVideoFrame转换为QImage

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 方法一 最简单 方法二 依赖opencv 方法三 qt5 15版本 前言 在qt框架下 实现相机预览的几种方式在qt相机预览已经描述过了 在该文章的几种方式中
  • 二叉搜索树(数组实现)

    内容 建立二叉搜索树 bool buildtree int k tree k value a index int cur 0 if index a size return true while 1 if a index lt tree cu
  • 正整数序列的数

    正整数序列的数 正整数序列的数量 问题描述 小明想知道 满足以下条件的正整数序列的数量 1 第一项为 n 2 第二项不超过 n 3 从第三项开始 每一项小于前两项的差的绝对值 请计算 对于给定的 n 有多少种满足条件的序列 输入格式 输入一
  • Qt使用gSoap实现webservice服务端和客户端

    文章目录 gSoap工具介绍 1 下载 2 Hello world 开始使用SOAP api 2 1 新建文件夹 2 2 新建服务接口头文件 hello h 2 3 使用 soapcpp2 exe 2 4 拷贝源代码库文件 2 5 Qt 服
  • 第二次作业:微信案例分析

    2 1 介绍产品相关信息 你选择的产品是 微信 为什么选择该产品作为分析 微信是一款全方位的手机通讯应用 帮助我们轻松连接全球好友 微信可以通过SMS MMS网络发送短信 进行视频聊天 与好友一起玩游戏 以及分享自己的生活到朋友圈 让我们感
  • Stable Diffusion 个人推荐的各种模型及设置参数、扩展应用等合集(不断更新中)

    本文主要是把平时使用的模型及其参数进行推荐和整理 相关 安装及其问题解决参考 Windows安装Stable Diffusion WebUI及问题解决记录 运行使用时问题 Windows使用Stable Diffusion时遇到的各种问题整
  • Stack,ArrayDeque,LinkedList的区别

    这段时间把疯狂JAVA再看了一遍 发现Stack ArrayDeque LinkedList都可以作为栈使用 所以就稍微从性能以及实现的细节对比这三者的区别 类继承树 由继承树看出 三者都是Collection的间接实现类 ArrayDeq
  • js中数组删除对象的几种方式总结

    1 关键字删除 2 splice删除 3 特殊位置删除 一 关键字删除 关键字删除是通过js提供的关键字 delete手动删除数组的某一项 使用delete删除掉数组中的元素后 会把该下标出的值置为undefined 数组的长度不会变 ar
  • 一个案例说明高层属性形式化验证

    1 验证软件功能介绍 Beosin VaaS的业务逻辑验证软件 是一款用来检测智能合约上层业务逻辑漏洞的软件 基于合约的白皮书 软件利用形式化方法 首先对单个函数进行属性的描述 在对单个函数进行属性的验证并通过后 基于这些已验证属性 抽取出
  • 号传到服务器为空,URL 传+号到后台变空格问题解决方案

    今天在调试客户端向服务器传递参数时 参数中的 全部变成了空格 原因是URL中默认的将 号转义了 解决方法如下 方法一 修改客户端 将客户端带 的参数中的 全部替换为 2B 这样参数传到服务器端时就能得到 了 方法二 修改服务器端 将空格替换
  • 第六天作业

    include
  • VC++操作SQLserver动态库【含源码】,及动态库使用教程。

    VC 操作SQLserver动态库 含源码 动态库使用Demo程序演示 include
  • Unity Window触摸屏电脑和移动端Input触控,控制相机旋转缩放

    Unity Window触摸屏电脑和移动端Input触控 控制相机旋转缩放 原理就是获取手指滑动的偏移量 来计算 代码帖出来 using UnityEngine using System using System Collections p
  • Codeforces 670C Cinema

    题目链接 https codeforces com problemset problem 670 C include
  • numpy.array多维数组的切片操作总结

    numpy array多维数组的切片操作总结 一 常规介绍 1 一维数组切片 2 二维数组的切片 3 维数超过 3 的多维数组 可通过 来简化操作 4 numpy中对切片元素的操作会影响原数组本身 5 array和list的对比 6 boo