python教程,numpy如何实现ndarray的横向及纵向合并?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
接着很久之前的话题,多个ndarray
类型变量进行合并。以前的文章里面,使用了一系列匪夷所思的函数来实现这个需求,包括:hstack()、.vstack()、.dstack()、.column_stack()、.row_stack()、.concatenate()
。然而,这里本来就有两个简单好写也比较好理解的函数,可以实现这个需求。这就是本文的主角:np.c_()
和np.r_()
。
苏南大叔的"程序如此灵动"技术博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@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
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
特例一:三个及以上ndarray合并
超过两个ndarray
,也是可以合并的。例如:
x4 = np.c_[a, b, d]
print(x4)
输出:
[['苏' '南' '技' '术' '技' '术' '博']
['大' '叔' '博' '客' '客' '不' '错']]
特例二:三维及以上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)
不过这里的合并规则,需要大家仔细体会哪个维度是dimension 0
了。更高维度的情况,苏南大叔就不做讨论了,一般来说也用不到,也很难理解。
相关文章
结束语
感觉写文章就给自己看好了,可能用不着那么多乱七八糟的客套话。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。