首页 > 解决方案 > 为什么我的函数适用于矩阵,但为什么不适用于向量?

问题描述

我对“鸭子打字”一词感到困惑。我编写了一个适用于矩阵的函数,但是为什么每当我尝试使用向量作为参数时它会出错?

这是我写的一段代码

标签: juliamatrix-multiplication

解决方案


在这种情况下,您似乎很幸运,并且恰好有一个^专门为矩阵设计的基本求幂方法 ( ) 的实现。可能是因为矩阵幂通常很有用,我敢打赌它们有很多优化。

@which v1^2

^(A::AbstractArray{T,2} where T, p::Integer) 在线性代数中 C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.1 \线性代数\src\dense.jl:366

但是没有内置的向量。请注意,对于矩阵AA^2意味着A * A使用矩阵乘法规则,而不是对 中的每个元素进行平方A。对于 2 × 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]

对于 vector v,我猜等价的是v^2 = v' * v,转置vv自身之间的点积,给你一个标量(现在我真的希望我可以在 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而不是进行矩阵乘法。


推荐阅读