将向量广播到矩阵以计算总和(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。
在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。