我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

接着很久之前的话题,多个ndarray类型变量进行合并。以前的文章里面,使用了一系列匪夷所思的函数来实现这个需求,包括:hstack()、.vstack()、.dstack()、.column_stack()、.row_stack()、.concatenate()。然而,这里本来就有两个简单好写也比较好理解的函数,可以实现这个需求。这就是本文的主角:np.c_()np.r_()

苏南大叔:python教程,numpy如何实现ndarray的横向及纵向合并? - ndarray-c-r
python教程,numpy如何实现ndarray的横向及纵向合并?(图5-1)

苏南大叔的"程序如此灵动"技术博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10python@3.11.0numpy@1.24.2pandas@1.5.3。本文以最常见的二维数组为主要的龙套变量。

龙套变量

import numpy as np

a = np.array([["苏", "南"], ["大", "叔"]])  # 2,2
b = np.array([["技", "术"], ["博", "客"]])  # 2,2
c = np.array([["苏", "南"], ["大", "叔"], ["好", "棒"]])  # 3,2
d = np.array([["技", "术", "博"], ["客", "不", "错"]])  # 2,3

np.c_ 横向合并(dimension 0)

np.c_()时横向合并,新的变量放置在原变量的右边,所以要求两者行数相同。

x1 = np.c_[a, b]    # 横向合并,行数一致
# x2 = np.c_[a, c]  # 横向合并,行数不一致
x3 = np.c_[a, d]    # 横向合并,行数一致

输出:

[['苏' '南' '技' '术']
 ['大' '叔' '博' '客']]

 [['苏' '南' '技' '术' '博']
 ['大' '叔' '客' '不' '错']]

行数不一致的时候,报错输出:

ValueError: all the input array dimensions except for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 2 and the array at index 1 has size 3

苏南大叔:python教程,numpy如何实现ndarray的横向及纵向合并? - 横向合并
python教程,numpy如何实现ndarray的横向及纵向合并?(图5-2)

np.r_ 横向合并(dimension 1)

np.r_()时横向合并,新的变量放置在原变量的下边,所以要求两者列数相同。

y1 = np.r_[a, b]    # 纵向合并,列数一致
y2 = np.r_[a, c]    # 纵向合并,列数一致
# y3 = np.r_[a, d]  # 纵向合并,列数不一致

输出:

[['苏' '南']
 ['大' '叔']
 ['技' '术']
 ['博' '客']]

 [['苏' '南']
 ['大' '叔']
 ['苏' '南']
 ['大' '叔']
 ['好' '棒']]

列数不一致的时候,报错输出:

ValueError: all the input array dimensions except for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3

苏南大叔:python教程,numpy如何实现ndarray的横向及纵向合并? - 纵向合并
python教程,numpy如何实现ndarray的横向及纵向合并?(图5-3)

特例一:三个及以上ndarray合并

超过两个ndarray,也是可以合并的。例如:

x4 = np.c_[a, b, d]
print(x4)

输出:

[['苏' '南' '技' '术' '技' '术' '博']
 ['大' '叔' '博' '客' '客' '不' '错']]

苏南大叔:python教程,numpy如何实现ndarray的横向及纵向合并? - 合并多个变量
python教程,numpy如何实现ndarray的横向及纵向合并?(图5-4)

特例二:三维及以上ndarray合并

维数超过两维的ndarray,也是可以合并的。例如:

a2 = c.reshape(1,2,3)
d2 = d.reshape(1,2,3)
x5 = np.c_[a2, d2]
print(x5,x5.shape)

输出:

[[['苏' '南' '大' '技' '术' '博']
  ['叔' '好' '棒' '客' '不' '错']]] 
(1, 2, 6)

苏南大叔:python教程,numpy如何实现ndarray的横向及纵向合并? - 合并更高维度
python教程,numpy如何实现ndarray的横向及纵向合并?(图5-5)

不过这里的合并规则,需要大家仔细体会哪个维度是dimension 0了。更高维度的情况,苏南大叔就不做讨论了,一般来说也用不到,也很难理解。

相关文章

结束语

感觉写文章就给自己看好了,可能用不着那么多乱七八糟的客套话。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python