vector - 与 Julia 中的转置不同的单例向量

标签 vector julia matrix-multiplication

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

最佳答案

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

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

如果您想要点积,请使用 dot 函数(您需要先执行 using LinearAlgebra)。如果你想要一个基于元素的产品,你可以使用广播符号 u .* v

关于vector - 与 Julia 中的转置不同的单例向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085910/

相关文章:

r - 如何反转向量的顺序?

c++ - 段错误 std::vector<std::string>

Julia 与函数 - NoMethodError

c# - 快速旋转/变换矩阵乘法

c - 如何执行快速数组乘法?

r - 如何只计算R中矩阵乘积的对角线

c++ - 在对象 vector 中找到最大值

C++ - 比较 vector 的有效方法

julia - 在 Julia 中使用 for 循环打印范围内的素数

class - Julia :无论是否面向对象编程