当前位置: 首页 > news >正文

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

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

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

下面详细介绍用法:

numpy.r_

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

np.c_[...]

1. 索引为切片

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

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

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

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

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

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

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

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

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' 。

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' 。

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

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

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' 结果相同。

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

numpy.c_

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

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

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

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

numpy.s_

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

np.s_[start:stop:step]

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

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总是会返回一个元组。

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


http://www.mrgr.cn/news/90674.html

相关文章:

  • 算法与数据结构(存在重复元素)
  • 【故障处理】- ora-39126
  • 在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程
  • 【清晰教程】本地部署DeepSeek-r1模型
  • Softhsm储存安全数据性能整理
  • ArcGIS注册开发账号及API KEY
  • 欧盟《人工智能法案》
  • SolidWorks C# How
  • 大模型WebUI:Gradio全解12——使用Agents和Tools智能代理工具构建UI(1)
  • 系统URL整合系列【不改hosts文件版】-- 代码1(springcloud-gateway动态路由)
  • 教程 | Proxmox VE(PVE)安装全流程指南(末尾附镜像及快速配置脚本)
  • 250213-异常exception
  • 【鸿蒙】ArkUI-X跨平台问题集锦
  • Elasticvue使用总结
  • Navicat导入海量Excel数据到数据库(简易介绍)
  • Linux——stdio
  • CentOS 7操作系统部署KVM软件和创建虚拟机
  • JavaScript 发起网络请求
  • DeepSeek教unity------MessagePack-01
  • 【2025深度学习系列专栏大纲:深入探索与实践深度学习】
  • PostgreSQL 备库的延迟问题
  • AcWing 795. 前缀和理解
  • 微服务SpringCloud Alibaba组件nacos教程(一)【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】
  • 【OpenCV】双目相机计算深度图和点云
  • windows10本地的JMeter+Influxdb+Grafana压测性能测试,【亲测,避坑】
  • MySQL、MariaDB 和 TDSQL 的区别