Pri*_*rgo 3 vector matrix-multiplication julia
如果我定义A = [1]我得到它A不等于,A'因为它们是不同的类型:
julia> A=[1]
1-element Array{Int64,1}:
1
julia> A'
1×1 LinearAlgebra.Adjoint{Int64,Array{Int64,1}}:
1
julia> A == A'
false
Run Code Online (Sandbox Code Playgroud)
如果我定义另一个向量B = [1, 2, 3]并尝试使用乘积来计算A',A我会得到以下输出:
B=[1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> B*A'
3×1 Array{Int64,2}:
1
2
3
julia> B*A
ERROR: MethodError: no method matching *(::Array{Int64,1}, ::Array{Int64,1})
...
...
Run Code Online (Sandbox Code Playgroud)
这似乎是*运算符签名的问题,Array{Int64,1}在定义C = [4 5]我们得到的另一个向量时,似乎不接受两个作为操作数:
julia> C=[4 5]
1×2 Array{Int64,2}:
4 5
julia> B*C
3×2 Array{Int64,2}:
4 5
8 10
12 15
Run Code Online (Sandbox Code Playgroud)
So分别*为类型Array{Int64,1}和操作数定义Array{Int64,2}。为什么我不能将列向量乘以单例向量,A但我可以使用A'?
答案取决于您对线性代数的理解程度。Julia 的数组乘法遵循线性代数的约定,如果您需要复习,维基百科的页面是一个很好的来源。
它归结为一个事实,即您A是一个列向量,A'而是一个行向量(如C)。矩阵乘法在(n, k)和(k, m)矩阵之间定义以产生(n, m)矩阵。有时可以将列向量视为(n, 1)矩阵,因此没有明确定义的两个列向量之间的乘法概念。
如果您想要点积,请使用该dot功能(您需要先做using LinearAlgebra)。如果您想要元素明智的产品,则可以使用广播符号u .* v.