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

如何在不改变顺序的情况下转置NumPy数组中的每个子矩阵?

解决方法

你用x.T不符合预期的原因很明确:这个操作是把整个数组做转置,而非针对每个1×3的子矩阵(也就是数组的每一行)单独转置。

要实现「不改变子矩阵顺序,仅转置每个子矩阵」的需求,针对y数组可以用以下两种实用方法:

方法1:给每个子矩阵增加维度(转成3×1)

通过给每个行向量添加新维度,把1×3的子矩阵转换成3×1的列向量,再做矩阵乘法:

import numpy as np

x = np.array([[1, 2, 3], [4,5,6], [1, 2, 3]])
y = np.array([[11, 22, 33], [44,55,66], [11, 22, 33]])

# 将y的每个1×3子矩阵转置为3×1
y_transposed = y[:, :, np.newaxis]  # 等价于 np.expand_dims(y, axis=2)

# 对应子矩阵执行矩阵乘法
Z = x @ y_transposed
# 把结果压缩为一维数组(可选操作)
Z = Z.squeeze()

运行后Z的结果是array([154, 715, 154]),每个元素对应子矩阵相乘的结果(比如第一个元素是1*11 + 2*22 + 3*33 = 154)。

方法2:直接计算点积(更简洁高效)

1×3矩阵和3×1矩阵的乘法,本质就是两个向量的点积,所以可以直接用元素相乘后求和的方式,跳过维度变换步骤:

Z = np.sum(x * y, axis=1)

这个方法得到的结果和方法1完全一致,代码更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:14