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

如何编写可拼接任意数量矩阵的Python函数?

修复任意数量矩阵拼接的Python函数问题

我来帮你定位问题并修复代码~

问题根源分析

你的concatenate_matrix2函数存在两个关键错误:

  • 错误使用np.hstack:np.hstack要求传入一个矩阵序列(比如元组、列表),但你在循环里每次只传单个矩阵给它。当传入单个二维矩阵时,hstack会把它当成一维数组的集合处理,直接将其展平成一维数组,这就是你得到(4,)形状的原因。
  • 循环覆盖变量值:你在循环里每次都给vector_pacient重新赋值,最后只保留了最后一个矩阵的处理结果,自然无法得到所有矩阵拼接的效果。

修复后的代码

其实根本不需要循环,直接把*args打包好的矩阵元组传给np.hstack就可以了,因为*args已经把所有传入的矩阵整理成了一个可迭代的序列:

import numpy as np

def create_matrix(number,rows,columns):
    matrix = np.full((rows,columns),number)
    return matrix

matrix1 = create_matrix(0,1,2)
matrix2 = create_matrix(1,1,3)
matrix3 = create_matrix(2,1,4)

def concatenate_matrix2(*args):
    # 直接将所有传入的矩阵序列传给hstack
    vector_pacient = np.hstack(args)
    return vector_pacient

print(concatenate_matrix2(matrix1,matrix2,matrix3))
print('result shape', concatenate_matrix2(matrix1,matrix2,matrix3).shape)

运行结果

执行后会得到你预期的输出:

[[0 0 1 1 1 2 2 2 2]]
result shape (1, 9)

可选:保留打印矩阵形状的功能

如果你还想保留打印每个输入矩阵形状的功能,可以在函数里添加循环打印,但不要在循环里处理拼接逻辑:

def concatenate_matrix2(*args):
    for arg in args:
        print(arg.shape)
    vector_pacient = np.hstack(args)
    return vector_pacient

这样运行时会先输出三个矩阵的形状,再返回正确的拼接结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:45:29