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

Matlab如何实现标量矩阵与子矩阵组成的向量的乘法运算

块矩阵加权乘运算实现方案

你要实现的运算本质是二维系数矩阵对三维子矩阵张量的加权求和运算,核心是先把B、C、D堆叠为三维张量,再通过张量收缩运算完成和系数矩阵A的乘法,以下是常用科学计算环境的实现方式:

Python(Numpy 环境)

  • 第一种方案:使用tensordot直接指定收缩维度,代码最简洁
import numpy as np
# 构造输入数据
A = np.array([[1,2,3], [4,5,6], [7,8,9]])
B = np.random.rand(100, 200)
C = np.random.rand(100, 200)
D = np.random.rand(100, 200)
# 堆叠B/C/D为形状3×100×200的张量
bcd_stack = np.stack([B, C, D], axis=0)
# 张量乘法,沿A的最后1维、bcd_stack的第0维收缩求和
result = np.tensordot(A, bcd_stack, axes=1)
# 结果说明:result形状为3×100×200,result[0]对应1*B+2*C+3*D,result[1]对应4*B+5*C+6*D,result[2]对应7*B+8*C+9*D
# 如需拼接为100×600的完整矩阵,执行以下代码
final_mat = np.concatenate([result[0], result[1], result[2]], axis=1)
  • 第二种方案:广播乘法显式实现,逻辑更直观
# 对A和堆叠张量扩展维度后广播相乘,再沿加权维度求和
result = (A[:, :, np.newaxis, np.newaxis] * bcd_stack[np.newaxis, ...]).sum(axis=1)

MATLAB 环境

% 构造输入数据
A = [1 2 3;4 5 6;7 8 9];
B = rand(100,200);
C = rand(100,200);
D = rand(100,200);
% 堆叠B/C/D为100×200×3的页张量
bcd_stack = cat(3, B, C, D);
% 批量页面乘法完成加权求和
result = pagemtimes(permute(A, [1,3,2]), permute(bcd_stack, [3,4,1,2]));
% 提取三个加权和结果
res1 = squeeze(result(1,:,:));
res2 = squeeze(result(2,:,:));
res3 = squeeze(result(3,:,:));
% 拼接为100×600的完整矩阵
final_mat = [res1, res2, res3];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:39:03