You need to enable JavaScript to run this app. NumPy中如何实现向量-矩阵-向量连乘得到结果24
优惠活动
大模型
产品
解决方案
定价
更多

NumPy中如何实现向量-矩阵-向量连乘得到结果24

NumPy实现a×b×c连乘(结果为24)的方案

前置基础定义

按照题目给出的数组初始化规则,基础对象的属性如下:

  • 一维向量a:a = np.array([1, 2]),形状为(2,),无明确行/列方向
  • 二维对角矩阵b:b = np.array([[4, 0], [0, 5]]),形状为(2, 2)
  • 转置向量c:c = a.T,由于一维数组无方向属性,转置后形状仍为(2,),和原a无形状差异

常见认知误区

NumPy的一维ndarray不存在行向量、列向量的维度区分,直接执行c = a.T不会改变c的形状。如果直接按照带维度的矩阵乘法规则(行向量×矩阵×列向量)书写代码,容易因为维度缺失导致后续批量运算时出现逻辑歧义。

可复现结果24的实现方案

方案1:显式调整维度,严格匹配矩阵乘法规则

将a调整为(1,2)的行向量形状,将c调整为(2,1)的列向量形状,完全符合矩阵乘法的维度传递规则:

import numpy as np
a = np.array([1, 2])
b = np.array([[4, 0], [0, 5]])
c = a.T
# 显式升维匹配矩阵运算维度
a_row = a.reshape(1, 2)
c_col = c.reshape(2, 1)
# 执行连乘运算
result = a_row @ b @ c_col
# result值为[[24]],提取标量值即可得到目标结果24
print(result.item())

方案2:用爱因斯坦求和实现,无维度歧义

通过np.einsum直接指定下标映射逻辑,不需要手动调整数组形状,计算过程直观可控:

# 下标逻辑:a的索引i,b的i-j维度,c的j维度,缩并所有维度后得到标量
result = np.einsum('i,ij,j->', a, b, c)
print(result) # 直接输出24

方案3:利用NumPy一维数组的乘法规则快速实现

由于一维数组间的@运算本质是内积,不需要调整形状即可得到正确结果:

# 计算流程:a(2,) @ b(2,2) → 长度为2的向量,再和c(2,)做内积得到标量
result = a @ b @ c
print(result) # 输出24

注意:这种写法虽然结果正确,但没有显式的维度校验,一旦后续把a换成二维行/列向量,很容易出现维度不匹配的报错,适合简单脚本快速计算,不适合复杂工程场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 07:54:07