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

如何对NumPy矩阵数组中的每个矩阵应用np.hstack函数?

解决numpy三维数组中每个矩阵横向拼接的问题

嘿,我完全get你的需求——把三维数组里的每个二维子矩阵的行横向拼接起来,得到一个2行6列的结果对吧?其实不用纠结np.apply_along_axis,numpy里有更简单直接的办法,给你两种方案:

方案一:列表推导式 + np.hstack

这个方法直观易懂,适合新手理解:

import numpy as np

matrices_w = np.asarray([[[1,2,3],[4,5,6]],[[9,8,7],[6,5,4]]])
# 遍历每个子矩阵,对每个矩阵执行横向拼接
result = np.array([np.hstack(mat) for mat in matrices_w])
print(result)
# 输出:
# array([[1, 2, 3, 4, 5, 6],
#        [9, 8, 7, 6, 5, 4]])

原理很简单:我们遍历三维数组的第一个维度(也就是每个子矩阵),对每个2x3的子矩阵用np.hstack把两行拼合成一行,最后再用np.array把这些拼接后的行组合成最终的二维数组。

方案二:用reshape直接调整维度(更高效)

如果你的数据量比较大,推荐用这个方法,因为它是numpy底层的维度变换,没有循环开销:

import numpy as np

matrices_w = np.asarray([[[1,2,3],[4,5,6]],[[9,8,7],[6,5,4]]])
# 把每个子矩阵的元素摊平成一行,-1让numpy自动计算列数
result = matrices_w.reshape(matrices_w.shape[0], -1)
print(result)

这里matrices_w.shape是(2,2,3),reshape(2, -1)会自动把后面两个维度(2和3)合并成2*3=6,直接得到(2,6)的数组,效果和hstack完全一致,但速度快很多。

至于你之前用np.apply_along_axis没成功,是因为这个函数会沿着指定轴把元素展平后再传进函数,不太适配这种“对每个子矩阵整体操作”的场景,所以上面两种方法更合适~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:29:11