在 MATLAB 中,我可以执行以下操作:
[1 2 3; 4 5 6] + [-1 -2 -3]
这将返回[0 0 0; 3 3 3]
,因为它理解我想要对矩阵的每一行执行向量加法。
我怎样才能在 Julia 中做到这一点?如果我尝试,它会给我这个错误:
ERROR: DimensionMismatch("dimensions must match: a has dims (Base.OneTo(2), Base.OneTo(3)), b has dims (Base.OneTo(1), Base.OneTo(3)), mismatch at 1")
最佳答案
在+
前面添加一个点,如下所示:
julia> [1 2 3; 4 5 6] .+ [-1 -2 -3]
2×3 Matrix{Int64}:
0 0 0
3 3 3
但是请注意,[-1 -2 -3]
不是 Julia 中的向量。它是一个只有一行的矩阵:
julia> [-1 -2 -3]
1×3 Matrix{Int64}:
-1 -2 -3
在 Julia 中,向量将是 [1, 2, 3]
并且向量始终被视为柱状:
julia> [1, 2, 3]
3-element Vector{Int64}:
1
2
3
原因:
[1 2 3; 4 5 6] + [-1 -2 -3]
失败之处在于,从数学角度来看,它是一个不正确的表达式。这两个矩阵:[1 2 3; 4 5 6]
和 [-1 -2 -3]
表示具有不同操作空间的线性运算符,并且添加此类线性运算符通常被认为在数学中是不允许的。
但是,如果矩阵具有相同的形状,您可以将它们添加为线性运算符,然后具有相同的起始和终止空间维度,以便可以添加它们:
julia> [1 2; 3 4] + [5 6; 7 8]
2×2 Matrix{Int64}:
6 8
10 12
(这样的操作在数学上是明确定义的)
您可以阅读有关广播的更多信息 here .
关于julia - 将向量广播到矩阵以计算总和(MATLAB 样式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71542222/