julia - 为什么我的函数适用于矩阵,但为什么不适用于向量?
问题描述
我对“鸭子打字”一词感到困惑。我编写了一个适用于矩阵的函数,但是为什么每当我尝试使用向量作为参数时它会出错?
解决方案
在这种情况下,您似乎很幸运,并且恰好有一个^
专门为矩阵设计的基本求幂方法 ( ) 的实现。可能是因为矩阵幂通常很有用,我敢打赌它们有很多优化。
@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
但是没有内置的向量。请注意,对于矩阵A
,A^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
,转置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
而不是进行矩阵乘法。
推荐阅读
- java - 如何在类映射中获取子类
- audio - 在微控制器(Arduino)中播放音频文件
- java - 如何使用 UWECStudent 正确设置构造函数?
- r - 计算r中数据框中某些行的百分位数
- matlab - 如何在 MATLAB 应用程序设计器中显示来自 simulink 块的视频
- url - 如何在 Yii2 中创建带有破折号的自定义 url?
- java - 如何检查应用程序的方向是否在android上固定
- python - 为什么不能从函数返回打印函数?
- javascript - 在javascript中加载两个图像
- react-data-grid - 将行动态添加到 React-data-grid