为什么我的函数适用于矩阵但为什么不适用于向量?
Why my function works for matrix but why not for vector?
我对这个词感到困惑"Duck-Typing"。我写了一个适用于矩阵的函数,但为什么每当我尝试使用向量作为参数时它都会出错?
在这种情况下,您看起来很幸运,恰好有一个专为矩阵设计的基本求幂方法 (^
) 的实现。可能是因为矩阵幂通常很有用,我敢打赌它们有很多优化。
@which v1^2
^(A::AbstractArray{T,2} where T, p::Integer) in LinearAlgebra at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.1\LinearAlgebra\src\dense.jl:366
但是没有内置的向量。请注意,对于矩阵 A
,A^2
表示 A * A
使用矩阵乘法规则,与对 A
中的每个元素进行平方不同。对于 2 x 2 矩阵 A = [a b; c d]
,您将得到:
A = [a b]
[c d]
A^2 = [a*a+b*c a*b+b*d]
[c*a+d*c c*b+d*d]
对于向量 v
,我猜等价物是 v^2 = v' * v
,v
和 v
本身的转置之间的点积,给你一个标量(现在我真的希望我可以在 SO 中使用 LaTeX 符号)。
一般来说,如果您希望运算符广播(神奇地应用于数组或矩阵的每个元素),请在其前面添加一个点。
func = v -> println(v.^2)
func(v2)
# [0.0826262, 0.127083, 0.513595]
这需要 v2 = [a, b, c]
的每个元素 并对其求平方:[a^2, b^2, c^2]
。它类似地对 v1
的 每个元素 求平方,而不是进行矩阵乘法。
我对这个词感到困惑"Duck-Typing"。我写了一个适用于矩阵的函数,但为什么每当我尝试使用向量作为参数时它都会出错?
在这种情况下,您看起来很幸运,恰好有一个专为矩阵设计的基本求幂方法 (^
) 的实现。可能是因为矩阵幂通常很有用,我敢打赌它们有很多优化。
@which v1^2
^(A::AbstractArray{T,2} where T, p::Integer) in LinearAlgebra at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.1\LinearAlgebra\src\dense.jl:366
但是没有内置的向量。请注意,对于矩阵 A
,A^2
表示 A * A
使用矩阵乘法规则,与对 A
中的每个元素进行平方不同。对于 2 x 2 矩阵 A = [a b; c d]
,您将得到:
A = [a b]
[c d]
A^2 = [a*a+b*c a*b+b*d]
[c*a+d*c c*b+d*d]
对于向量 v
,我猜等价物是 v^2 = v' * v
,v
和 v
本身的转置之间的点积,给你一个标量(现在我真的希望我可以在 SO 中使用 LaTeX 符号)。
一般来说,如果您希望运算符广播(神奇地应用于数组或矩阵的每个元素),请在其前面添加一个点。
func = v -> println(v.^2)
func(v2)
# [0.0826262, 0.127083, 0.513595]
这需要 v2 = [a, b, c]
的每个元素 并对其求平方:[a^2, b^2, c^2]
。它类似地对 v1
的 每个元素 求平方,而不是进行矩阵乘法。