如何编写可拼接任意数量矩阵的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
相关产品推荐
相关产品推荐

