Singleton向量与其在Julia中的转置不同

问题描述 投票:1回答:1

如果定义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

如果我定义另一个向量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})
...
...

[这似乎是*运算符签名的问题,在定义另一个向量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

因此*分别为类型Array{Int64,1}Array{Int64,2}的操作数定义。为什么我不能将列向量乘以单例向量A,但可以使用A'

vector julia matrix-multiplication
1个回答
0
投票

答案取决于您对线性代数的理解程度。 Julia遵循线性代数的数组乘法惯例,如果您需要复习,wikipedia's page是一个很好的来源。

归结为您的A是列向量,而A'是行向量(例如C)。在(n, k)(k, m)矩阵之间定义矩阵乘法以产生(n, m)矩阵。有时可以将列向量视为(n, 1)矩阵,因此在两个列向量之间没有明确定义的乘法概念。

如果需要点积,请使用dot功能(首先需要执行using LinearAlgebra)。如果要使用基于元素的产品,则可以使用广播符号u .* v

© www.soinside.com 2019 - 2024. All rights reserved.