将向量广播到矩阵以计算总和(MATLAB 样式)

Broadcasting vector to matrix to calculate sum (MATLAB style)

在MATLAB中,我可以做如下操作:

[1 2 3; 4 5 6] + [-1 -2 -3]

这将 return [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