You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pythonic方式堆叠行数不同但列数相同的np.array?

问题描述

我有多个列数相同但行数不同的numpy数组:

a=np.array([[10, 20, 30],
            [40, 50, 60],
            [70, 80, 90]])

b=np.array([[1, 2, 3],
            [4, 5, 6]])

希望合并成如下结果:

result=np.array([[10, 20, 30],
                 [40, 50, 60],
                 [70, 80, 90],
                 [1, 2, 3],
                 [4, 5, 6]])

我目前用for循环实现,但觉得不够优雅,想找更Pythonic的实现方式。我的循环代码如下:

c=[a,b]
num_row=sum([x.shape[0] for x in c])
num_col=a.shape[1] # 也可以用b.shape[1]
result=np.zeros((num_row,num_col))
k=0
for s in c:
    for i in s:
        result[k]=i
        k+=1

# 输出结果
# array([[10, 20, 30],
#        [40, 50, 60],
#        [70, 80, 90],
#        [1, 2, 3],
#        [4, 5, 6]])
解决方案

直接用numpy内置的np.vstack()或者np.concatenate()就能高效实现,完全不需要手动写循环,这才是更Pythonic的做法:

方法1:使用np.vstack()

vstack专门用于垂直堆叠数组(按行合并),适合列数相同的数组:

import numpy as np

a=np.array([[10, 20, 30],
            [40, 50, 60],
            [70, 80, 90]])

b=np.array([[1, 2, 3],
            [4, 5, 6]])

result = np.vstack((a, b))
print(result)

输出:

array([[10, 20, 30],
       [40, 50, 60],
       [70, 80, 90],
       [1, 2, 3],
       [4, 5, 6]])

方法2:使用np.concatenate()

通过指定axis=0参数实现垂直合并,和vstack效果一致,更通用(还能通过axis=1实现水平合并):

result = np.concatenate((a, b), axis=0)
print(result)

输出和上面完全相同。

如果有多个数组要合并,直接把它们放进元组或列表里传入即可,比如合并三个数组np.vstack((a, b, c))。这些内置函数都是numpy底层优化过的,比手动循环效率高得多,尤其是处理大数据量的时候优势更明显。

内容的提问来源于stack exchange,提问作者doubleE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:10:29