NumPy中生成和堆叠数组、生成切片的特殊对象:np.r_ np.c_ np.s_

devtools/2025/2/18 10:42:02/

在NumPy中有三个特殊的对象,非常好用:

  1. np.r_:按行连接两个数组,也就是将两个数组垂直堆叠。
  2. np.c_:按列连接两个数组,也就是将两个数组水平堆叠。
  3. np.s_:生成用于切片的slice对象。

下面详细介绍用法:

numpy.r_

将切片或对象沿第一个轴连接,语法:

python">np.c_[...]

1. 索引为切片

如果索引表达式包含切片符号或标量,则创建一个范围由切片符号指定的一维数组。

切片符号 start:stop:step 相当于 np.arange(start, stop, step) 。

python">np.r_[0:10:2]  # array([0, 2, 4, 6, 8])

如果step为虚数则相当于 np.linspace(start, stop, step, endpoint=1) 。

python">np.r_[-1:1:6j]  # array([-1. , -0.6, -0.2,  0.2,  0.6,  1. ])

切片展开后,所有逗号分隔的序列都会被连起来。

python">np.r_[-1:1:6j, [0]*3, 5, 6]
# array([-1. , -0.6, -0.2,  0.2,  0.6,  1. ,  0. ,  0. ,  0. ,  5. ,  6. ])

2. 索引为数组

如果索引表达式包含逗号分隔的数组,则将它们沿第一个轴堆叠。

python">np.r_[np.array([1,2,3]), 0, 0, np.array([4,5,6])]
# array([1, 2, 3, 0, 0, 4, 5, 6])

3. 字符串参数

可以用字符串作为索引的第一个参数来改变输出:

(1) 三个由逗号分隔的整数

第一个整数axis指定在哪个轴上连接,默认为 '0' 。

python">a = np.array([[0, 1, 2], [3, 4, 5]])
np.r_['0', a, a]
# array([[0, 1, 2],
#        [3, 4, 5],
#        [0, 1, 2],
#        [3, 4, 5]])
np.r_['1', a, a]
# array([[0, 1, 2, 0, 1, 2],
#        [3, 4, 5, 3, 4, 5]])

 第二个整数ndmin指定每个数组在连接前必须具有的最小维数。如果原数组的维度不足,则会自动添加长度为1的新轴直到维度为ndmin,默认为 '1' 。

python">np.r_['0,2', [1,2,3], [4,5,6]]
# array([[1, 2, 3],
#        [4, 5, 6]])

 第三个整数trans1d指定当数组在升维时原数组应该按顺序铺在哪个维度上,默认为 '-1' 。

python">np.r_['0,2,0', [1,2,3], [4,5,6]]
# array([[1],
#        [2],
#        [3],
#        [4],
#        [5],
#        [6]])
# 解释:原数组是一维的(3,),由于ndmin=2所以需要升维,在升维时trans1d=0所以原数组被铺在了维度0上,
# 变成了(3,1),axis=0所以两个数组在维度0上连接,输出结果的维度为(6,1)。np.r_['0,2,1', [1,2,3], [4,5,6]]
# array([[1, 2, 3],
#        [4, 5, 6]])
# 解释:在升维时trans1d=1所以原数组被铺在了维度1上,变成了(1,3),垂直堆砌后输出结果的维度为(2,3)。np.r_['1,2,0', [1,2,3], [4,5,6]]
# array([[1, 4],
#        [2, 5],
#        [3, 6]])
# 解释:在升维时原数组被铺在了维度0上,变成了(3,1),水平堆砌后输出结果的维度为(3,2)。np.r_['1,2,1', [1,2,3], [4,5,6]]
# array([[1, 2, 3, 4, 5, 6]])
# 解释:在升维时原数组被铺在了维度1上,变成了(1,3),水平堆砌后输出结果的维度为(1,6)。

(2) 字符串 'r' 或 'c'

输出matrix对象。

如果结果是一维且指定了 'r' ,则生成一个 1 x N(行)矩阵。

如果结果是一维且指定了 'c' ,则生成一个 N x 1(列)矩阵。

如果结果是二维,则 'r' 和 'c' 结果相同。

python">np.r_['r',[1,2,3], [4,5,6]]  # matrix([[1, 2, 3, 4, 5, 6]])

numpy.c_

将切片或对象沿最后一个轴连接,相当于:

python">np.r_['-1,2,0', index expression]

比如,下面的输出与上面 np.r_['1,2,0', [1,2,3], [4,5,6]] 的输出相同:

python">np.c_[np.array([1,2,3]), np.array([4,5,6])]
# array([[1, 4],
#        [2, 5],
#        [3, 6]])

numpy.s_

生成一个由切片符号表示的slice对象,语法:

python">np.s_[start:stop:step]

相当于生成了一个范围为 np.arange(start, stop, step) 的切片。

python">np.array([0, 1, 2, 3, 4])[np.s_[2::2]]  # array([2, 4])
np.array([0, 1, 2, 3, 4])[np.arange(2,5,2)]  # array([2, 4])

numpy中切片的类型为IndexExpression,但相较于直接使用它,更应该用这两个预定义的实例:

np.s_:IndexExpression(maketuple=False)

np.index_exp:IndexExpression(maketuple=True)

两者的区别在于np.index_exp总是会返回一个元组。

python">np.s_[2::2]  # slice(2, None, 2)
np.index_exp[2::2]  # (slice(2, None, 2),)


http://www.ppmy.cn/devtools/158706.html

相关文章

电子时钟html

要求: 电子时钟的时间需与北京时间实时对应。 原理: 获取当地时间,我发现不用UTC8,当地时间已经与北京时间一致。获取时分秒,小于十的补零。调用clock更新,这样刷新的时候还会有内容。设置每秒钟调用一次。…

hexo 魔改 | 修改卡片透明度

hexo 魔改 | 修改卡片透明度 ** 博客食物用更佳 博客地址 ** 这是笔者自己瞎倒腾的。作为前端菜鸡一枚,大佬们随便看看就好~ 我用的主题是 butterfly 4.12.0 分析 通过开发者工具可以看出来卡片的背景和 --card-bg 变量有关 再在 sources 下的 css 文件夹下的…

2024年12月电子学会青少年机器人技术等级考试(三级)理论综合真题

202412 青少年等级考试机器人理论真题三级 一、单选题 第 1 题 Arduino UNO/Nano主控板,程序模块如下,该模块运行后,引脚5输出的等效电压为0V,变量i对应的值是?( ) A:0 B&#xff1…

Unity状态机的实现方法一

Unity状态机知识点整理 1. 状态机基本概念 1.1 什么是状态机 Unity常见的状态机管理分为三种: 枚举状态机通过实现接口的方式多态出的更加便于维护的状态机Unity Animator自带的StateMachineBehaviour 1.2 不同状态机实现方式的对比 自定义状态机(…

Ubuntu 上安装和配置 Nexus Repository Manager

在 Ubuntu 上安装和配置 Nexus Repository Manager(Sonatype Nexus)通常用于管理 Maven、npm、Docker 等包的私有仓库。以下是详细步骤: 1. 系统准备 更新系统并安装必要依赖: 在终端运行以下命令: sudo apt update…

LabVIEW用户界面(UI)和用户体验(UX)设计

作为一名 LabVIEW 开发者,满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代,为 LabVIEW 应用程序设计直观且具有美学感的界面,同样是不容忽视的关键任务。一个优秀的界面设计,不仅能提升用户对程序的…

deepin linux UOS AI 使用 deepseek-r1 30B

我们用 ollama 下载 deepseek-r1 3B 执行命令: $ ollama pull models/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF 下载完成后 我们就要重新更改目录和文件了 deepseek-r1/gguf (这是目录结构) 然后我把 gguf文件 更名成 DeepSeek-R1.gguf (就是目录下最大的那个文件) …

springCloud-2021.0.9 之 GateWay 示例

文章目录 前言springCloud-2021.0.9 之 GateWay 示例1. GateWay 官网2. GateWay 三个关键名称3. GateWay 工作原理的高级概述4. 示例4.1. POM4.2. 启动类4.3. 过滤器4.4. 配置 5. 启动/测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收…