当前位置: 首页 > 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),)

相关文章:

  • RK3588视觉控制器与AI 算法:开启工业视觉检测新境界
  • 数据结构实现顺序表的尾插,尾删,按值查找/修改/删除,按下标查找/增加/删除
  • python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第四节】
  • Java面试第二山!《计算机网络》!
  • VMware Fusion关机Ubuntu虚拟机黑屏解决方法
  • 使用DeepSeek建立一个智能聊天机器人0.12
  • 【玩转全栈】----Django基本配置和介绍
  • sql语言语法的学习
  • 深入理解 MQTT 协议:物联网通信的核心
  • VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant
  • 常用查找算法整理(顺序查找、二分查找、插值查找、斐波那契查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
  • 国产编辑器EverEdit - 如虎添翼的功能:快速选择
  • pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网
  • Qt——连接MySQL数据库之编译数据库驱动的方法详细总结(各版本大同小异,看这一篇就够了)
  • CentOS系统docker配置镜像加速registry-mirrors,配置阿里云和道客
  • IDEA通过Contince接入Deepseek
  • QT 互斥锁
  • 初识React
  • 2025年 Java 技术的新趋势
  • 纪念|海上金石学的兴盛与王昶《金石萃编》
  • 老凤祥一季度净利减少两成,去年珠宝首饰营收下滑19%
  • 在上海生活8年,13岁英国女孩把城市记忆写进歌里
  • “十四五”以来少数民族发展资金累计下达边疆省区252亿元
  • 王毅会见乌兹别克斯坦外长赛义多夫
  • 解码人格拼图:探索心理健康的多维视角