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

如何在Julia中向量化实现同尺寸Matrix{Vector}的外和广播?

原生Julia实现矩阵对应位置向量的外和生成Matrix{Matrix{}}

问题描述

现有两个尺寸相同的Matrix{Vector{}}类型矩阵A和B,需生成Matrix{Matrix{}}类型矩阵M,满足M[i, j][k, l] = A[i, j][k] + B[i, j][l],即每个元素为A和B对应位置向量的外和。

示例情况

A=[[[1, 2]] [[3, 4]] ; [[5, 6]] [[7, 8]]]
# 输出:
# 2×2 Matrix{Vector{Int64}}:
#  [1, 2]  [3, 4]
#  [5, 6]  [7, 8]
B=[[[11, 21]] [[13, 44]] ; [[25, 61]] [[27, 28]]]
# 输出:
# 2×2 Matrix{Vector{Int64}}:
#  [11, 21]  [13, 44]
#  [25, 61]  [27, 28]
size(A)==size(B)
# 输出:true

目标结果示例:

M=[A[i, j] .+ B[i, j]' for i in 1:size(A)[1], j in 1:size(A)[2]]
# 输出:
# 2×2 Matrix{Matrix{Int64}}:
#  [12 22; 13 23]  [16 47; 17 48]
#  [30 66; 31 67]  [34 35; 35 36]

尝试过的方法及问题

由于A和B是大规模矩阵,希望避免循环实现向量化操作,但尝试A .+ adjoint.(B)时出现维度不匹配错误:

ERROR: DimensionMismatch: dimensions must match: a has dims (Base.OneTo(1), Base.OneTo(2)), b has dims (Base.OneTo(2),), mismatch at 1

现有解决方案(TensorCast包)

已通过TensorCast包实现需求:

using TensorCast
@cast MCast[i, j][k, l] := A[i, j][k] + B[i, j][l];
MCast = collect(MCast);
# 输出:
# 2×2 Matrix{SubArray{Int64, 2, Array{Int64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64, Int64}, true}}:
#  [12 22; 13 23]  [16 47; 17 48]
#  [30 66; 31 67]  [34 35; 35 36]

需求

寻求更优雅的原生Julia实现方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:44